用GCC编译器链接文件
C++: Linking files with GCC compiler
我有三个文件:myh.h;my.cpp;use.cpp。以下是文件的内容:
myh.h
extern int foo;
void print_foo();
void print(int);
my.cpp
#include "myh.h"
#include <iostream>
void print_foo()
{
std::cout<<foo<<std::endl;
}
void print(int i)
{
std::cout<<i<<std::endl;
}
use.cpp
#include "myh.h"
int main()
{
foo=7;
print_foo();
print(99);
return 0;
}
GCC显示以下错误:
my.o:my.cpp:(.text+0x7): undefined reference to `foo'
use.o:use.cpp:(.text+0x10): undefined reference to `foo'
collect2: ld returned 1 exit status
我使用-c命令编译文件,它没有给出错误。我使用以下命令链接:
g++ -o final my.o use.o
这里有什么问题,我读过其他有类似问题的话题,这里的情况很奇怪.....
对于好奇的人来说,这是Stroustrup的书《使用c++的编程原理》中的练习练习
编辑:我按照dasblinkenlight所说的做了,并且在use.cpp中,我在foo前面添加了一个int(所以现在定义了foo),但我仍然得到这个错误:
my.o:my.cpp:(.text+0x7): undefined reference to `foo'
collect2: ld returned 1 exit status
这告诉我,它没有定义在我的。cpp也?如果我必须在任何地方定义它,那么在头文件中包含它的意义是什么,或者应该如何更适当地接近它?
你得到一个链接错误,因为你声明 foo
,但你从来没有定义它。
extern int foo
只是一个声明;它不会导致foo
变量的内存分配,只是承诺您将在其他地方进行分配。要修复它,您需要将这一行添加到其中一个cpp文件中,如下所示:
#include "myh.h"
int foo;
int main()
{
foo=7;
print_foo();
print(99);
return 0;
}
问题是声明了foo
但没有定义。您需要在一个翻译单元中定义foo
,例如:
int foo = 0;
相关文章:
- CMake-按正确顺序将项目与C运行时对象文件链接
- 无法将 GLFW 库与 Ubuntu 18.04 上的头文件链接
- 错误 VSP1011:无法获取调试信息.与 /配置文件链接器开关链接
- 将我的主输出库与测试可执行文件链接时出现问题
- CMake + Qt + GTest 文件链接
- 生成文件链接
- 使用LTO静态链接的可执行文件(链接时间优化):如何使用以前构建的库进行制作
- 生成文件链接错误
- 使用 c++ 生成文件的文件链接
- 生成文件:链接器错误
- 反转头文件/链接
- C++实现和头文件链接
- .cpp文件将不会与.h文件链接
- 将问题与多个文件链接在一起
- 编译三个C++文件.链接错误
- C++如何将我的主类与我的头文件链接起来
- 使文件链接问题 架构x86_64的未定义符号
- c++和mex文件链接错误
- 使用堆叠类生成文件链接问题
- 使用对象文件链接c++中的东西