【发布时间】:2014-10-26 22:45:34
【问题描述】:
我有一个调用一些库函数的程序。我可以成功地用 GCC 编译。但是,当我切换到 G++ 4.7 时(因为我需要在其中添加 C++ 代码),我得到了
undefined reference to <a function name here>
编译命令如下:
<gcc or g++> foo.c -o foo <path-to-a-static-library>.a -l<the library>
包含我调用的函数的库是用 C 编写的。
如何解决? 用 G++ 重新编译库?这很糟糕,因为我们有其他 C 程序使用该库。
【问题讨论】:
-
名称修改!!!查找
extern "C"... -
@πάνταῥεῖ 谢谢。我搜索了一个结果,例如“如果需要在 C++ 中使用,C 代码头应该包含在 extern 中”。那么,如果库中没有那个 extern C,我就无能为力了吗?
-
@PengZhang 在你的 C++ 代码中做
extern "C" { #include "library.h" } -
我建议将
extern "C" { ... }放入库头文件中,并由#ifdef __cplusplus适当保护,以使其同时适用于C 和C++:允许迁移到C++ 至关重要。 -
extern "C" { #include "library.h" }不是一个好主意,因为library.h可能包含标准标头