Seb*_*sza 7 c++ linker makefile poco-libraries
我试图了解如何在我的C++项目中使用非标准库.我有几个问题.
让我们说我想使用POCO库.所以我下载了它并使用make(静态构建)构建它.现在我有一堆.o文件和.h文件.在不同的目录中有一个Path.h文件和一个Path.o文件.
现在我想在我的代码中使用这个模块.所以我使用#include"Poco/Path.h"包含文件.我是否必须修改makefile并将Path.o添加到目标中?
使用标准库时会发生什么?那些仅在头文件中可用吗?我知道模板代码无法预编译.剩下的呢?
除.h和.o文件外,您可能还有一个或多个libXXX.a和/或libXXX.so文件.这些是应用程序应链接的实际库文件.
要使用该库,请在源文件中包含相关标头,然后更改makefile以告知链接器它还应将应用程序链接到XXX库.典型的链接器命令是-lXXX,并且链接器将查找libXXX.a和libXXX.so并使用最合适的选项.
标准库与外部库没有什么不同,除了您不必将其明确指定给链接器.
您的问题似乎暗示您已经拥有自己代码的makefile.如果是这种情况,那么是的,您应该修改该makefile中可执行文件的规则.正如Bart van Ingen Schenau指出的那样,POCO makefile可能会将对象文件组装成库等Poco/Libraries/libPoco.a,所以你应该使用它们而不是试图挑选出你需要的目标文件.例如,如果您现在的规则是:
foo: foo.o bar.o
g++ -lSomeLibrary $^ -o $@
Run Code Online (Sandbox Code Playgroud)
你应该把它改成
foo: foo.o bar.o
g++ -lSomeLibrary -LPoco/Libraries -lPoco $^ -o $@
Run Code Online (Sandbox Code Playgroud)
(你的问题的第二部分,"会发生什么......其余的怎么样?"我不清楚.)
注意:这是一个坏主意#include "Poco/Path.h".这使得您的代码依赖于目录结构,这是它不应该关心的.更好的是#include "Path.h"告诉编译器在哪里找到它:g++ -c -IPoco ....
| 归档时间: |
|
| 查看次数: |
25749 次 |
| 最近记录: |