7

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

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

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

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

4

2 回答 2

9

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

要使用该库,您需要在源文件中包含相关的头文件,并更改您的 makefile 以告诉链接器它也应该将您的应用程序链接到 XXX 库。典型的链接器命令是-lXXX,链接器将同时查找 libXXX.a 和 libXXX.so 并使用看起来最合适的那个。

标准库与外部库并没有真正的不同,只是您不必将其显式指定给链接器。

于 2010-10-25T13:59:19.017 回答
8

您的问题似乎暗示您已经有自己的代码的生成文件。如果是这种情况,那么是的,您应该在该 makefile 中修改可执行文件的规则。正如 Bart van Ingen Schenau 指出的那样,POCO makefile 可能会将对象文件组装到诸如Poco/Libraries/libPoco.a. 例如,如果现在您的规则是:

foo: foo.o bar.o
    g++ -lSomeLibrary $^ -o $@

你应该把它改成

foo: foo.o bar.o
    g++ -lSomeLibrary -LPoco/Libraries -lPoco $^ -o $@

(你问题的第二部分,“会发生什么......其余的呢?”我不清楚。)

注意:这是一个坏主意#include "Poco/Path.h"。这使您的代码依赖于目录结构,这是它不应该关心的。最好#include "Path.h"告诉编译器在哪里可以找到它:g++ -c -IPoco ....

于 2010-10-25T14:31:59.777 回答