我想更改现有的makefile以包含我自己制作的另一个静态库。我按照一些指示制作了图书馆;它目前包含除.o
之外的所有main.o
个文件。我们打电话给我的图书馆libABC.a
。如果它有所不同,我正在修改的包是用C ++编写的,而我所包含的库是用C语言编写的。
到目前为止,我已将-lABC
添加到我的库列表中,并将库放在与其他库相同的目录中,这样我就不必添加另一个-L
命令。我已将所有头文件移动到包的/include
目录(不确定我是否必须这样做)所以我可以避免添加另一个-I
命令。按原样编译没有给我任何错误,但如果我尝试为库中的一个头文件添加#include
命令并调用函数,则会出现undefined reference to function()
错误。
关于我能做什么的任何想法?
答案 0 :(得分:1)
由于软件包是用C ++编写的,而你的库是用C语言编写的,所以你可能需要使用extern "C"
链接,因为C ++可能会命名为你的符号命名。
最简单的方法是将C函数定义包装在extern "C"
块的标题中,如:
#ifdef __cplusplus
extern "C" {
#endif
int myFunction();
int someOtherFunction(char *);
#ifdef __cplusplus
} // extern "C"
#endif
确保只在块中包装您自己的函数定义;您从标题中#include
的任何外部库都应该在块之外。