web-dev-qa-db-ja.com

同じ名前の共有ライブラリが存在する場合、静的ライブラリとのリンクを強制するにはどうすればよいですか

libmathで定義されているsin()関数を使用するファイルmain.cppがあるとします。また、libmath.aとlibmath.soの両方が同じディレクトリにあると仮定します。ここで、コマンドg++ -o main main.cpp -lmathを発行すると、Linuxのデフォルトの動作は、共有ライブラリlibmath.soにリンクすることです。共有ライブラリを削除または移動せずにプログラムに静的ライブラリlibmath.aとリンクさせる方法はありますか?

31
user550009

-staticをリンカーに渡す必要がありますが、必要なのは特定のライブラリのみです。例えば。:

g++ -o main main.cpp -Wl,-Bstatic -lmath -Wl,-Bdynamic
25
nos

リンカが-l:<filename>をサポートしている場合、以下を使用できます。

g++ -o main main.cpp -l:libmath.a
9
Dmitry Yudakov

この関数を使用します。

g++ -o main main.cpp /path_to/libmath.a
5
karlphillip