さらに別のC/C ++統合の質問:私はいくつかのレガシーCライブラリ(それを呼びましょうlibcl.a
)をC ++ライブラリ(それを呼びましょう)にある機能で更新しようとしていlibcppl.a
ます。ライブラリは私のliblc.a
環境全体で使用されており、GCC(Cコンパイラモード)を使用して多くのCプロジェクトにリンクされています。
>> gcc prog.c -lcl
現在、オブジェクトファイル(from +で作成)でlibcl.a
構成されています。cl.o
gcc
cl.c
cl.h
はオブジェクトファイル(from +で作成)でlibcppl.a
構成されます。cppl.o
g++
cppl.cpp
cppl.h
既存のアプリケーションはCで記述されており、ビルドスクリプトはGCCを使用しているため、更新されたライブラリへの移行をできるだけ簡単にしたいと思います。したがって、GCCをメインコンパイラとして使い続けたいのですが、それでも更新されたライブラリとリンクすることができます。
この答えを見つけると、次を使用してC++オブジェクトをGCCCプロジェクトにリンクできます-lstdc++
。
>> gcc -c cl.c -o cl.o
>> g++ -c cppl.c -o cppl.o
>> ar rcs libcl.a cl.o cppl.o
>> gcc prog.c -lcl -lstdc++
ただし、コンパイルコマンドラインでの明示的な言及 を削除したいと思います。libstdc++
私がやろうとしたのは、次のようにして、clライブラリにlibstdc++を含めることでした。
>> ar rcs libcl.a cl.o cppl.o /usr/lib/libstdc++.so.6
ただし、アプリケーションをビルドすると、次のようになります。
>> gcc prog.c -lcl
In file included from cppl.cpp:2:
./libcl.a(cppl.o):(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status
1. gccリンカーが、オブジェクトと一緒にアーカイブされたC ++標準ライブラリを見つけられないのはなぜですか?
2. (オブジェクトファイルではなく)ライブラリでの使用に制限はありますか?ar
3.この問題を克服する方法はありますか?