我花了两个多小时在网上研究这个,但没有用 - 我已多次按照所有说明进行操作。
我使用的是C ++ 11,GCC,Ubuntu 15.04和Code :: Blocks 13.12。
我正在创建一个自定义静态库。目前,它只包含两个文件:iochannel.hpp
和iochannel.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"
据我所知,绝对没有比我已经遵循的更多的在线教学。
这是一个理论上无足轻重的事情,但我很难过。任何人都可以帮我解决这个问题吗?
编辑:我的文件结构如下。在一个文件夹中(实际上,我的此项目的存储库的根目录),我有两个文件夹:pawlib
和pawlib-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;事物的类型。
答案 0 :(得分:1)
我对静态库和动态库感到困惑。当您链接到静态库时,您还必须链接到其头文件。这就是您在任何UNIX计算机上找到/usr/include
(对于静态库)和Build Options-> Search directories -> Compiler
(对于它们的标题)文件夹的原因。
正如弗朗西斯所指出的,这与我没有给出头文件路径这一事实有关。如果您使用的是CodeBlocks,请转到.h
对话框,然后使用.hpp
或{{1}}文件添加指向该文件夹的路径。
现在它正在发挥作用。