10個の実行可能ファイルを生成するCプロジェクトがあり、そのすべてを静的にリンクします。私が直面している問題は、これらの実行可能ファイルの1つが、共有オブジェクトバージョンのみが利用可能なサードパーティライブラリを使用していることです。
-static
フラグをgccに渡すと、ldは問題のライブラリが見つからないというエラーを表示し(.aバージョンを探していると思われます)、実行可能ファイルはビルドされません。理想的には、静的ライブラリが見つからない場合は、できる限り静的にリンクし、共有オブジェクトライブラリにフェールオーバーするように「ld」に指示できるようにします。
Interiumでは、「ld」がlib1とlib2で静的にリンクすることを期待してgcc -static -lib1 -lib2 -shared -lib3rdparty foo.c -o foo.exe
のようなものを試しましたが、実行時の依存関係はlib3rdpartyにのみあります。残念ながら、これは意図したとおりには機能しませんでした。代わりに-shared
フラグが-static
フラグを上書きし、すべてが共有オブジェクトとしてコンパイルされました。
静的にすべてか無かの取引をリンクしていますか、それとも私がミックスアンドマッチできる方法がありますか?
このスレッド を見ると、実行できることがわかります。 GNU提案の人
gcc foo.c -Wl,-Bstatic -lbar -lbaz -lqux -Wl,-Bdynamic -lcorge -o foo.exe