【发布时间】:2019-03-13 18:35:00
【问题描述】:
我正在尝试将 C++ 库静态链接到 C 项目,但似乎无法找到出路。我阅读了多个帖子,但没有任何帮助。 下面是我的 Makefile 的 sn-p:
CFLAGS += -I../path/to/headers
LIBS += ../path/to/lib.a
我收到以下链接错误:
"undefined reference to ...
collect2: ld returned 1 exit status"
我查看了这篇文章的订购信息,但我认为这不是问题: c++ undefined references with static library
我想知道这是否可能。如果是这样,我需要将哪些标志添加到我的 C 项目 Makefile 中。
【问题讨论】:
-
您不能将 c++ 直接链接到 c,因为名称会在名称修饰下。你可以使用
extern "C"(或者猜错名字:P) -
除了@appleapple 猜错名字并没有那么复杂。编译代码后,您可以查看对象或库文件(例如,在 Linux 上使用
nm)。糟糕的是,名称修饰不是标准化的,并且取决于编译器/平台。我支持 appleapple 为他/她提供关于extern "C"的更好建议。虽然,它有局限性,并且标记的变量和函数确实必须符合 C。(恕我直言,对于后一个事实,没有出路。) -
而且,它是否适用于静态和动态(使用 SO 文件而不是静态)链接?
-
您能说明哪些引用未解决吗?他们应该来自那个 C++ 库吗?
-
这些引用来自我正在尝试集成的 C++ 库。在上面的例子中,它只是一个函数调用。例如。对“call_add”的未定义引用,其中 call_add 是在某个 C++ 文件中的头文件和实现中声明的函数。