自定义C ++静态库不链接(代码::块)

时间:2015-08-26 05:27:42

标签: c++ linker static-libraries codeblocks

我花了两个多小时在网上研究这个,但没有用 - 我已多次按照所有说明进行操作。

我使用的是C ++ 11,GCC,Ubuntu 15.04和Code :: Blocks 13.12。

我正在创建一个自定义静态库。目前,它只包含两个文件:iochannel.hppiochannel.cpp。我编译,一切都很好。在libpawlib.a

中生成一个pawlib/bin/Debug文件

接下来,在我想要使用静态库的项目中,我进入Project > Build Options...。我将.a文件的路径添加到Linker settings,然后将.a文件的文件夹添加到Search Directories > Compiler> Linker我已检查,双重检查,以及 - 检查并对路径进行四重检查。

只要我不尝试从库中导入,该项目的构建就会成功,并且会运行。但是,无论我如何使用#include语句,它都说"没有这样的文件或目录"当我编译。我已经尝试了以下所有(单独)......

#include <iochannel>
#include <iochannel.hpp>
#include <pawlib/iochannel>
#include <pawlib/iochannel.hpp>
#include "iochannel"
#include "iochannel.hpp"
#include "pawlib/iochannel"
#include "pawlib/iochannel.hpp"

据我所知,绝对没有比我已经遵循的更多的在线教学。

这是一个理论上无足轻重的事情,但我很难过。任何人都可以帮我解决这个问题吗?

编辑:我的文件结构如下。在一个文件夹中(实际上,我的此项目的存储库的根目录),我有两个文件夹:pawlibpawlib-test。它包含以下重要文件......

  • pawlib/bin/Debug/libpawlib.a
  • pawlib/src/iochannel.cpp
  • pawlib/include/iochannel.hpp

pawlib-test中的项目使用相对路径../pawlib/bin/Debug/libpawlib.a../pawlib/bin/Debug,具体取决于它是否需要文件或目录路径。绝对路径也失败了。我已确认这些路径中存在文件和文件夹。

重要提示:我不必手动包含pawlib的.hpp文件,因为这会破坏库的整个目的。我经常使用静态库,而从不必须将.hpp文件或其目录添加到搜索目录中。

gcc命令及其错误(由CodeBlocks生成)如下......

-------------- Build: Debug in pawlib-test (compiler: GNU GCC Compiler)---------------

g++ -std=c++11 -std=c++11 -Wall -g -std=c++11 -g -I../pawlib/bin/Debug -c /home/jason/Code/Repositories/pawlib-git/pawlib-test/main.cpp -o obj/Debug/main.o
/home/jason/Code/Repositories/pawlib-git/pawlib-test/main.cpp:2:31: fatal error: pawlib/iostream.hpp: No such file or directory
 #include "pawlib/iostream.hpp"
                               ^
compilation terminated.
Process terminated with status 1 (0 minute(s), 0 second(s))
1 error(s), 0 warning(s) (0 minute(s), 0 second(s))

编辑2:我的错误(部分)...标题通常与静态库分开导入。问题是,几乎所有的教程或文档都没有提到这一点。它是其中之一&#34;每个人都知道,所以它应该不用说&#34;事物的类型。

1 个答案:

答案 0 :(得分:1)

我对静态库和动态库感到困惑。当您链接到静态库时,您还必须链接到其头文件。这就是您在任何UNIX计算机上找到/usr/include(对于静态库)和Build Options-> Search directories -> Compiler(对于它们的标题)文件夹的原因。

正如弗朗西斯所指出的,这与我没有给出头文件路径这一事实有关。如果您使用的是CodeBlocks,请转到.h对话框,然后使用.hpp或{{1}}文件添加指向该文件夹的路径。

现在它正在发挥作用。