提问人:Zeveso 提问时间:8/8/2011 最后编辑:Peter MortensenZeveso 更新时间:5/11/2022 访问量:22456
使用“g++”编译 C++ 程序的“未定义引用”
"undefined reference to" using 'g++' to compile a C++ program
问:
我似乎无法让错误消失。错误如下。我看过谷歌搜索,但仍然无法弄清楚。这并不是说我是 C++ 的新手,但我已经有一段时间没有玩过它了。
奇怪的是,它可以在 Windows 上使用 g++......
使用时出错:
g++ main.cpp
输出:
/tmp/ccJL2ZHE.o:在函数 Help::Help()' main.cpp:(.text+0x1d):对 Help::~Help()'
的未定义引用
main.cpp:(.text+0x46):对“Help::~Help()”的未定义引用
collect2:ld 返回 1 退出状态main': \ main.cpp:(.text+0x11): undefined reference to
Help::sayName()' \ main.cpp:(.text+0x2e): undefined reference to
文件主.cpp
#include <iostream>
#include "Help.h"
using namespace std;
int main () {
Help h;
h.sayName();
// ***
// ***
// ***
return 0;
}
文件 Help.h
#ifndef HELP_H
#define HELP_H
class Help {
public:
Help();
~Help();
void sayName();
protected:
private:
};
#endif // HELP_H
文件帮助.cpp
#include <iostream>
#include "Help.h"
using namespace std;
Help::Help() { // Constructor
}
Help::~Help() { // Destructor
}
void Help::sayName() {
cout << " ***************" << endl;
cout << " ************************************" << endl;
cout << " ************" << endl;
cout << " *********************" << endl;
}
答:
15赞
john
8/8/2011
#1
用
g++ main.cpp Help.cpp
你必须告诉编译器你希望它编译的所有文件,而不仅仅是第一个文件。
8赞
Jakub M.
8/8/2011
#2
您应该将 help.o 添加到您的 g++ 行:
g++ -c help.cpp -o help.o
g++ help.o main.cpp
通过将其拆分为两行,您可以节省编译时间(对于较大的项目),因为您只能在更改时进行编译。 并且使用得当会为您省去很多麻烦:help.cpp
make
Makefile
#Makefile
all: main
main: help main.cpp
g++ -o main help.o main.cpp
help: help.cpp
g++ -c -o help.o help.cpp
0赞
Sankalp Arora
8/24/2018
#3
我的 Linux Lubuntu 发行版也遇到了同样的问题,它为我的构造函数和析构函数带来了问题。它没有认出他们。
实际上,如果您只是将所有三个文件编译在一起,这就会消失。因此,保存所有文件后,只需执行以下操作:
g++ main.cpp Help.h Help.cpp
./a.out
./a.out 是 Linux 的可执行文件。对不起,我不知道 Windows。您的程序将顺利运行。
评论