我有一个简单的C ++项目,其结构如下: - 一个基础项目(即:包含main()),以及与其他所有内容的链接 - 一些自定义库都构建为静态库(即:.a文件) ---其中一个静态库使用共享目标文件中的功能(即:.so文件)
因此,例如,在完成所有初始编译之后,这就是项目在链接时出现(在树视图中)的方式:
-myApp (the main application)
--libaudio.a (the audio library I made)
--libnetwork.a (the networking library I made)
--libvideo.a (the video library I made)
--libboost.a (boost library)
最初,这个项目建立得很好。我只需要确保我的makefile中有一个简单的行:
LIBS+=audio network video
最近,我不得不改变音频库的工作方式。我现在需要使用第三方库,我所拥有的只是头文件(.h)和共享对象(.so)文件。所以链接时的新结构如下所示:
-myApp (the main application)
--libaudio.a (the audio library I made)
---libthirdparty.so (contains third-party audio handling functions)
--libnetwork.a (the networking library I made)
--libvideo.a (the video library I made)
--libboost.a (boost library)
这实际上意味着我有一个链接静态库的应用程序,其中调用外部共享对象。因此,我将头文件放在适当的位置,以便在编译libaudio.a时没有任何构建错误,并将libthirdparty.so文件放在链接器搜索所有已安装库的位置。
在这一点上,我无法得到建设的东西。它只是没有看到libthirdparty.so文件,即使我知道它位于链接器默认搜索的位置。出于某种原因,包装我的libaudio代码,如下例(借用www.cplusplus.com)修复了构建错误:
my_C_CPP_Header.h:
#ifndef MY_C_CPP_HEADER
#define MY_C_CPP_HEADER
/*check if the compiler is of C++*/
#ifdef __cplusplus
extern "C" {
int myOtherCfunc(int arg1, int arg2); /* a C function */
}
#endif
void myCppFunction1(); /* C++ function */
void myCppFunction2(); /* C++ function */
/*check if the compiler is of C++ */
#ifdef __cplusplus
}
#endif
#endif
现在,我遇到了一个新问题。现在它正在构建,它不再在libboost.a中静态链接,而是在启动时因libboost.so不存在而崩溃。所以,不管怎么说,如果我设法将它编译成libclost,这个设置会破坏libboost的编译方式。
欢迎任何建议。提前谢谢大家。
答案 0 :(得分:2)
最后,有一个“LIBPATH =”而不是覆盖库包含路径的“LIBPATH + =”语句。解决。
谢谢大家的帮助。