2

すべてのファイルの静的ライブラリを作成して、mylib.a ファイルを他のユーザーに渡してシステムで実行できるようにしたいと考えています。コードでopencvライブラリを使用しています。次のコマンドを使用してコードをコンパイルしました。

g++ index.cpp -o display1 -Wl,-Bdynamic pkg-config --cflags --libs opencv -lglut -lGL -lGLU -Wl,-Bstatic mylib.a

しかし、次のエラーが発生しています。

/usr/bin/ld: cannot find -lgcc_s
collect2: ld returned 1 exit status
4

1 に答える 1

4

ケレック SB のコメントは正しいと思います。コマンドは

g++ index.cpp -o display1 mylib.a $(pkg-config --cflags --libs opencv) -lglut -lGL -lGLU

説明:

  • およびフラグは役に立ちません-Wl,-Bdynamic-Wl,-Bstaticリンカーは、検出した内容に応じて、静的ライブラリまたは動的ライブラリを自動的に選択します。ライブラリへのパスを指定すると ( のようにmylib.a)、指定したライブラリを選択できず、リンクされます。-lXフラグを指定すると、X または X を検索し、lib見つかっ.solibもの.aをリンクしますが、ほとんどの Linux インストールにはシステム ライブラリの静的バリアントがないため、どちらからも選択するものはありません。
  • さらに悪いことに、-Wl,-Bdynamic-Wl,-Bstatic間違っています。共有ライブラリのリンクを-Wl,-Bstatic 禁止します。これには、静的 libgcc を選択するという副作用があり、リンカ コマンド ラインで暗黙のうちに最後になります。そして、あなたはそれをインストールしていないようです。ほとんどの Linux システムはそうではありません。
  • 各オブジェクトは、それが参照するライブラリの前にコマンドラインにリストする必要があります。mylib.aopencv または opengl を必要とする関数が含まれていると予想されるため、これらの-lフラグの前にリストする必要があります。
于 2012-08-08T07:13:48.310 に答える