【发布时间】:2016-06-13 05:28:54
【问题描述】:
我有 3 个文件; main.cpp(包含 main())、FileWriter.h 和 FileWriter.cpp。我在 Debian Jessie 上使用 g++(版本 Debian 4.9.2-10)。我的项目在“/root/dev/Practice/src/”中包含 .cpp 文件,在“/root/dev/Practice/include/”中包含单个标头 (FileWriter.h)。这两个目标文件的编译工作正常,但链接到可执行文件会抱怨对 main() 的未定义引用,尽管我确实在“main.cpp”中定义了一个看似有效的引用。
这是我的 make 文件的输出(位于根 '/root/dev/Practice/' 目录中):
g++ -c -g -Wall -o src/FileWriter.o src/FileWriter.cpp g++ -c -g -Wall -o src/main.o src/FileWriter.cpp g++ src/FileWriter.o src/main.o -o bin/Practice /usr/lib/gcc/i586-linux-gnu/4.9/../../../i386-linux-gnu/crt1.o: In function '_start'" /build/glibc-J1NNmk/glibc-2.19/csu/../sysdeps/i386/start.S:111: undefined reference to 'main' collect2: error: ls returned 1 exit status Makefile:10: recipe for target 'bin/Practice' failed
这是我的 main.cpp 文件的内容:
#include <string>
#include <iostream>
#include "/root/dev/Practice/include/FileWriter.h"
int main() {
std::cout << "Hello!" << std::endl;
FileWriter * fw = new FileWriter("foofile");
fw->AddLine("CRAP!");
fw->AddLine("NO!");
return 0;
}
我的 FileWriter.h:
#ifndef FILEWRITER_H_
#define FILEWRITER_H_
#include <string>
#include <iostream>
class FileWriter{
public:
FileWriter(std::string);
~FileWriter();
void AddLine(std::string);
private:
std::string fileLocation;
std::ofstream *filestream;
};
#endif /* FILEWRITER_H_ */
...还有我的 FileWriter.cpp:
#include "/root/dev/Practice/include/FileWriter.h"
#include <fstream>
// g++ linker error if 'inline' not included - why?
inline FileWriter::FileWriter(std::string fileName)
{
this->fileLocation = fileName;
const char * x = this->fileLocation.c_str();
this->filestream = new std::ofstream();
this->filestream->open(x, std::ios::out | std::ios::app);
}
inline FileWriter::~FileWriter()
{
this->filestream->close();
}
inline void FileWriter::AddLine(std::string line)
{
*this->filestream << line << std::endl;
}
【问题讨论】:
-
为什么要骂人?这可能会令人沮丧,但请不要在公开帖子中这样做
-
@AndrewL 当他意识到问题所在时,他正在准备要说的话......
-
哎呀!大声笑对不起。编辑删除。
-
#include "/root/..."。如果你以 root 身份编译,你就是一个勇敢的人 :) -
勇敢,或者只是一个愚蠢的新手,他还没有做过任何坏事让我创建一个用户帐户:)
标签: c++ linker g++ linker-errors