静的ライブラリの依存関係を持つ gcc 共有ライブラリを作成しています。
スタティック ライブラリのパーツを次のようにコンパイルします。
gcc -c -m64 -O2 -fPIC -std=c99 -Wall ms*.c //there are 10 C files, no warnings
次に、以下を使用して静的ライブラリを作成します。
ar rc static_lib.a ms*.o
次に、プログラムのパーツを次のようにコンパイルします。
g++ -c -m64 -O2 -fPIC -std=c++14 -Wall ab*.cpp //there are 5 C++ files, just -Wunused-variable warnings
次に、次のように共有ライブラリを作成します。
g++ -shared -g -Wall ab*.o static_lib.a -o shared_lib.so
通常、この shared_lib.so は、Ruby プログラムから外部関数インターフェースを使用して呼び出されます。ubuntu や mac(.dylib) でやれば問題ないのですが、debian stretch でやると静的ライブラリ関連の設定が正しくないようなエラーが出ます。テスターを作成し、次のように cpp ファイルの main 関数を使用して実行するなど、外部関数インターフェイスなしでアプリケーションを実行すると、次のようになります。
> g++ -o library_test ab*.o static_lib.a
> ./library_test
問題はない!
私の質問は、共有ライブラリを作成するためのどのような構成がここで欠落している可能性があるかということです。特に Debian Stretch 9.5 では! または、共有ライブラリに問題があるかどうかを理解できる方法はありますか。