Makefile:将库添加到另一个项目

时间:2015-08-10 19:19:58

标签: c++ c static makefile .a

我想更改现有的makefile以包含我自己制作的另一个静态库。我按照一些指示制作了图书馆;它目前包含除.o之外的所有main.o个文件。我们打电话给我的图书馆libABC.a。如果它有所不同,我正在修改的包是用C ++编写的,而我所包含的库是用C语言编写的。

到目前为止,我已将-lABC添加到我的库列表中,并将库放在与其他库相同的目录中,这样我就不必添加另一个-L命令。我已将所有头文件移动到包的/include目录(不确定我是否必须这样做)所以我可以避免添加另一个-I命令。按原样编译没有给我任何错误,但如果我尝试为库中的一个头文件添加#include命令并调用函数,则会出现undefined reference to function()错误。

关于我能做什么的任何想法?

1 个答案:

答案 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的任何外部库都应该在块之外。

另请参阅:In C++ source, what is the effect of extern "C"?