C++使用makefile链接到库(newbe)

Seb*_*sza 7 c++ linker makefile poco-libraries

我试图了解如何在我的C++项目中使用非标准库.我有几个问题.

让我们说我想使用POCO库.所以我下载了它并使用make(静态构建)构建它.现在我有一堆.o文件和.h文件.在不同的目录中有一个Path.h文件和一个Path.o文件.

现在我想在我的代码中使用这个模块.所以我使用#include"Poco/Path.h"包含文件.我是否必须修改makefile并将Path.o添加到目标中?

使用标准库时会发生什么?那些仅在头文件中可用吗?我知道模板代码无法预编译.剩下的呢?

Bar*_*nau 9

除.h和.o文件外,您可能还有一个或多个libXXX.a和/或libXXX.so文件.这些是应用程序应链接的实际库文件.

要使用该库,请在源文件中包含相关标头,然后更改makefile以告知链接器它还应将应用程序链接到XXX库.典型的链接器命令是-lXXX,并且链接器将查找libXXX.a和libXXX.so并使用最合适的选项.

标准库与外部库没有什么不同,除了您不必将其明确指定给链接器.


Bet*_*eta 8

您的问题似乎暗示您已经拥有自己代码的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 ....