1

次のコマンドが機能します

g++ file.cpp $( GraphicsMagick++-config --cppflags --cxxflags --ldflags --libs )

しかし、ライブラリにリンクされていない静的実行可能ファイルが必要なので、試しました

g++ file.cpp $( GraphicsMagick++-config --cppflags --cxxflags --ldflags --libs ) -static

ただし、次のエラーのみが生成されます

/usr/bin/ld.bfd.real: /usr/lib/gcc/x86_64-linux-gnu/4.6/crtbeginT.o: relocation R_X86_64_32 against `__DTOR_END__' can not be used when making a shared object; recompile with -fPIC
/usr/lib/gcc/x86_64-linux-gnu/4.6/crtbeginT.o: could not read symbols: Bad value
collect2: ld returned 1 exit status

を追加-fPICしても同じ結果になります。

Ubuntu 12.04 64 ビットの標準リポジトリに付属する GraphicsMagick++ バージョンを使用しています。

GraphicsMagick++ は ImageMagick のフォークであるため、ImageMagick のいくつかの古いトリックはおそらく機能しますが、私は ImageMagick を使用したことがなく、GraphicsMagick++ のみを使用しました。

4

1 に答える 1

0

その特定のライブラリに対して静的にリンクするには、その-Wl,-Bstatic に使用します。

g++ $( GraphicsMagick++-config --cppflags --cxxflags ) -fPIC file.cpp -o file -Wl,-Bstatic $( GraphicsMagick++-config --ldflags --libs )

その後、さらに多くのライブラリを渡し、それらに対して動的にリンクしたい場合は、パス-Wl,-Bdynamicして元に戻し、後でライブラリを追加することができます。

編集:特定の引数の順序にも注意してください。最初にコンパイラ フラグ、次にファイル、最後にリンカー フラグとライブラリです。他の順序では、ランダムな障害が発生する可能性があります。本当。

于 2012-08-12T20:52:07.157 に答える