gpt4 book ai didi

c++ - 为什么我不能使用 gcc 链接具有 C 接口(interface)的混合 C/C++ 静态库?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:05:09 24 4
gpt4 key购买 nike

我有一个混合的 C/C++ 库。

在外部它提供了一个使用extern C 的C 接口(interface)。内部有模板和类。使用“ar”创建库没有问题。该文件称为 libo-client.a。

但是,当使用 gcc(不是 g++)链接 .a 文件时,我得到很多错误,如下所示:

libo-client.a(mysocket.o):(.rodata._ZTV7mStream[vtable for mStream]+0x10): undefined reference to `__cxa_pure_virtual'
...
mysocket.cpp:(.text+0x15ad): undefined reference to `operator new[](unsigned long)'
mysocket.cpp:(.text+0x15c1): undefined reference to `operator delete(void*)'
mysocket.cpp:(.text+0x167a): undefined reference to `__cxa_allocate_exception'
mysocket.cpp:(.text+0x16a6): undefined reference to `__cxa_throw'
...

我的编译/链接行如下所示:

gcc $(CFLAGS) $(INCLUDES) test2.c libo-client.a -o test2 

test2 是我的测试工具。

当我使用 g++ 时,不会出现此问题。但是,我将把这个库连接到用 gcc 编译的 C 项目中。我该如何解决这个问题?这是什么原因?

编辑:

即使我没有使用标准的 C++ 库,它显然需要一些东西,例如 operator new/delete 等,并且内部也有异常(exception)。

我正在将这个东西与 Xen 管理程序联系起来,所以我不确定我有什么选择,只能完全重写这个东西或者尝试用 G++ 编译 Xen?

最佳答案

解决您的问题的最简单方法是链接g++;这会得到正确的库。

问题是 C++ 有很多 C 没有的要求,并且在调用 main() 之前做更多的工作以确保事情被正确初始化。

如果您坚持使用 C 编译器进行链接,至少您必须在链接命令中包含 C++ 支持库。

关于c++ - 为什么我不能使用 gcc 链接具有 C 接口(interface)的混合 C/C++ 静态库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7397302/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com