c++ - 自定义 C++ 静态库未链接 (Code::Blocks)

标签 c++ linker static-libraries codeblocks

过去两个小时,我一直在网上研究这个问题,但无济于事 - 我已经多次按照所有说明进行操作。

我正在使用 C++11、GCC、Ubuntu 15.04 和 Code::Blocks 13.12。

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

中生成单个 libpawlib.a 文件

接下来,在我想要使用静态库的项目中,我进入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: 我的错误(部分)... header 通常与静态库分开导入。问题是,几乎没有教程或文档提到这一点。这是一种“人人都知道,所以不言而喻”的事情。

最佳答案

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

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

现在一切正常。

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

相关文章:

c++ - 使用 QML 清除 WebView 缓存

c++ - 错误:(-215:断言失败)m.dims <= 2 in function 'FormattedImpl' in cv::dnn

c++ - 二进制表示中数字的偶数和奇数位置上的 1 的个数是多少?

gcc - AIX 5.3 (ld-xlc) 等效选项 Linux (ld-gcc) -rpath

c++ - 与(静态)库的两种方式通信

c++ - 将字符串 vector 保存到磁盘不起作用

c++ - 根据需要组装一个函数并快速计算

c++ - 解决 fortran 子例程的 C++ 包装器库之间的非唯一符号

安卓 : merging static libraries into single one

xcode - 为什么Xcode不为静态库生成dSYM