0

私がしようとしているかなり複雑なビルドがありますが、この質問のために少し単純化します。実行可能ファイルを生成するために、3 つの静的ライブラリ (libx.a liby.z libz.a) に対してコンパイルおよびリンクしようとしている 3 つの C++ ファイル (main.cpp file2.cpp および file3.cpp) があります。

関連する多くの依存関係があります。

3 つの c ファイルはすべて、3 つのライブラリすべてに依存しています。libx は liby と libz に依存しています。最後に、libx は file2.cpp に含まれるいくつかのコールバック関数にも依存しています。

これを正しくビルドするコマンドラインはどれですか? 数十のバリエーションを試しましたが、リンカーを満足させるものはまだありません。

問題があれば、ライブラリは gcc でコンパイルされた純粋な C コードです。ソースは c++ で、g++ でコンパイル/リンクしています。これはビジュアル スタジオ プロジェクトとして正しく機能しており、Linux に移植しようとしています。

4

2 に答える 2

2

あなたの投稿から:

g++ main.cpp file2.cpp file3.cpp -lx -ly -lz

ただし、静的リンクが問題を引き起こしている場合、またはいずれかのライブラリを配布する必要がある場合は、それらを共有オブジェクト(一般にDSO.soと呼ばれるファイル) にすることを検討してください。その場合、たとえば をビルドするときに、すべてのソースをオブジェクト ファイルにコンパイルしてから、それらを結合します。libx.a

g++ -shared *.o -o libx.so -ly -lz

liby.a(このバージョンでは、とlibz.aが静的であることを前提としており、 に結合されます。libx.so

于 2013-02-12T16:32:32.283 に答える
0

extern "C" { }C ライブラリのヘッダーを含めるために、.cpp ファイルでを使用する必要がある場合があります。

C と C++ を混在させる方法の C++にC ヘッダーを含めるを参照してください。

于 2013-02-12T16:49:19.333 に答える