質問: Ubuntu 16.04.1 LTS を使用しています。 C++で静的ライブラリ(.a)が存在し、それを取り込んでshared object(.soファイル)を作りたいです。 ``` g++ -c -m64 -Wall -Werror \ CppExe.cpp \ -L /path/to/(libSample.a directory)/ \ -Wl,--whole-archive \ libSample.a \ -Wl,--no-whole-archive \ -o libCppExe.o g++ -shared -m64 -Wall -Werror -fPIC \ libCppExe.o \ -o libCppExe.so ``` このような形でshared objectのlibCppExe.soを作成しようと致しましたが、 1つ目のg++のコンパイルで `g++: warning: libSample.a: linker input file unused because linking not done` と表示され、.soファイルを作成することが出来ません。 どのようにすれば適切に作成できるでしょうか。
回答: こんにちは。 1つ目のg++コマンドで、libSample.aをリンクするようにリンカへ指定してますが、-cオプションをつけてリンクしないように指定してます。矛盾してますね。 2つ目のg++でlibSample.aをリンクするよう指示しましょう。 ただ、2つ目のg++に-fPICオプションを付けていますが、-fPICはコンパイル・オプションです。リンク・オプションではないです。CppExe.cppをコンパイルする時、およひ、libSample.aへコンパイルする時の両方で-fPICオプションをつけましょう。 32ビット・ビルドでしたら-fPICは必須ではないですが、64ビット・ビルドでは必須のようです。