【发布时间】:2012-12-02 01:54:02
【问题描述】:
我按照以下教程创建了一个静态库。
http://tldp.org/HOWTO/Program-Library-HOWTO/static-libraries.html
http://www.adp-gmbh.ch/cpp/gcc/create_lib.html
http://www.cs.dartmouth.edu/~campbell/cs50/buildlib.html
我使用ar 工具在C 中生成了一个静态库。该库来自不同的目录。我正在正确生成库,并且我正在使用它来编译我的程序,如下所示:
gcc -lpthreads main.c -o server -L thread-pool -lthreadpool
当前目录下的库名为thread-pool,其中包含libthreadpool.a。
根据教程,我需要在main.c 中包含我的.h 文件,如下所示:#include "threadpool.h"。 GCC 抛出一个错误,提示找不到 threadpool.h。这很明显,因为它位于不同的目录中。
当我包含为:#include threadpool/threadpool.h" 时,它会编译但实际上不起作用。它仍然无法识别这些功能。我不确定为什么会这样。我认为在编译静态库时,实际上您不需要实际发送.h 文件或任何源。
这里有什么问题?我该如何克服这个问题?
编辑:
我知道 .h 文件与静态库不同。我不知道为什么我上面所说的似乎让我在两者之间感到困惑。
无论如何,当使用静态库时,是否意味着我们还需要.h 文件并将其包含到源代码中,而不仅仅是使用静态库编译程序?
【问题讨论】:
-
这里似乎有些混乱。 .h 文件的#include 以及与静态库的链接是分开的。 #include 的工作方式与往常一样,独立于任何库文件。
-
@ThomasPadron-McCarthy 我知道区别。请参阅上面的编辑。
-
好的。但如前所述,.h 文件的#include 和与库文件的链接是分开的,我不明白为什么你认为链接会以某种神奇的方式让你跳过#include?我会尝试在答案中写一个更长的解释。
-
我猜是因为我用它编译了它。好吧,无论如何,我正确地进行了包含,但由于某种原因它仍然无法正常工作。
-
不,你没有用它编译。但我试图在下面的回答中更清楚地解释。
标签: c gcc static-libraries