我花了过去两个小时在网上进行研究,但无济于事-我多次遵循所有说明。

我正在使用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:我的错误(部分)...标题通常与静态库分开导入。问题是,几乎所有教程或文档都没有提到这一点。这是“每个人都知道的,因此应该不言而喻”类型的事情之一。

    最佳答案

    我对静态库和动态库感到困惑。链接到静态库时,还必须链接到其头文件。这就是为什么在任何UNIX计算机上都可以找到/usr/lib(对于静态库)和/usr/include(对于它们的 header )文件夹的原因。

    正如francis指出的,这与我没有给出头文件的路径有关。如果您使用的是CodeBlocks,请转到Build Options-> Search directories -> Compiler对话框,然后将路径添加到包含.h.hpp文件的文件夹中。

    现在,它的工作方式只是桃花心木。

    关于c++ - 自定义C++静态库未链接(代码::块),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32218601/

    10-11 05:42