另一个C/C++集成问题:我正在尝试libcl.a使用我在C++库中的功能(让我们称之为)更新一些遗留C库(让我们称之为libcppl.a).该liblc.a库正在我的环境中使用,并使用GCC(在C编译器模式下)链接到许多C项目中:
>> gcc prog.c -lcl
在libcl.a目前包括的cl.o对象文件(具有创建gcc从cl.c+ cl.h).
在libcppl.a由的cppl.o对象文件(具有创建g++从cppl.cpp+ cppl.h).
因为现有的应用程序是用C语言编写的,而构建脚本是使用GCC的,所以我希望尽可能简单地过渡到更新的库.因此,我想继续使用GCC作为主编译器,但仍然能够与更新的库链接.
找到这个答案,我可以使用以下方法将C++对象链接到GCC C项目-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 ?
有没有办法克服这个问题?
你可以单独编译prog.c使用gcc,然后g++用来链接:
# compile the main program to an object file
gcc  prog.c -o prog.o
#use g++ to link everything (it'll automatically pull in libstdc++)
g++ prog.o -lcl
或者,您可以prog.c通过使用以下选项明确告知g++编译prog.c为C源文件来一步编译和链接-x:
g++ -x c prog.c -lcl
有关和之间行为差异的更多信息,请参阅/sf/answers/409829871/.gccg++