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