c++ - 包含库中的外部变量

标签 c++ linker mingw codeblocks

即使经过相当多的谷歌搜索,我在 C++ 中遇到了一个问题,我创建了一个带有头文件和源文件的项目,然后尝试创建另一个包含第一个项目的项目。我找到了 this问题,但提问者能够生成一个我似乎无法生成的 .a 文件。

标题.hpp

extern int num;

源.cpp

#include "Header.hpp"

int num = 2;

(顺便说一下,这一切都在 Code::Blocks 中)

我做了另一个包含第一个项目的项目。

main.cpp

#include <iostream> 

#include "Header.hpp"

int main(int argc, const char* argv[])
{
    std::cout << num << "\n";
}

为了包含第一个项目,我:

  • 将第一个项目的根目录添加到第二个项目的“搜索目录”->“编译器”列表中

  • 将第一个项目的相同根目录添加到第二个项目的“搜索目录”->“链接器”列表

当我尝试使用 MinGW 编译此代码时,出现错误:

undefined reference to 'num'

一些谷歌搜索建议我将第一个项目的 .lib/.a 文件添加到“链接器设置”->“链接库”列表中。但是,我的第一个项目没有 .lib/.a 文件,我不太确定如何创建它。

还需要什么来确保我的“库”项目可以包含在我的第二个项目中?

最佳答案

感谢 Sami Kuhmonen 的评论,我意识到问题在于我将构建目标设置为可执行文件而不是静态库,这就是为什么我得到的是 .exe 文件而不是 .a 文件。我所要做的就是更改构建目标,将 .a 文件添加到“链接器设置”->“链接库”列表并更改“搜索目录”->“编译器”/“链接器”列表以搜索包含和 src 目录,它起作用了。

关于c++ - 包含库中的外部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32409290/

相关文章:

c++ - 静态库可移植性

python - Boost Python 类导出无法在 visual studio 2013 中编译并出现链接错误

C++ 结构声明 collect2 : ld returned 1 exit status

c - 各种编译器编译的链接库

c++ - 名称后跟 '::' 必须是类或命名空间错误,即使 '::' 跟在类名之后

c++ - 添加类后项目链接错误

c++ - CMake:有没有办法将选项传递给 g++ 但不传递给 nvcc

c++ - 错误 : LNK1104: cannot open file

c++ - 从共享库加载方法,该方法调用在子类中实现的方法

c++ - 带有 MinGW 的 PhysX3 - 链接错误