另一个 C/C++ 集成问题:我正在尝试libcl.a使用 C++ 库中的功能(我们称之为)更新一些遗留的 C 库(我们称之为libcppl.a)。该liblc.a库在我的环境中被广泛使用,并使用 GCC(在 C 编译器模式下)链接到许多 C 项目中:
>> gcc prog.c -lcl
当前libcl.a由cl.o目标文件组成(使用gccfrom cl.c+创建cl.h)。
由目标文件(使用from +创建)libcppl.a组成。cppl.og++cppl.cppcppl.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
3.有没有办法克服这个问题?