g ++链接错误:'未定义引用'main'

时间:2016-06-13 05:28:54

标签: c++ linker g++ linker-errors

我有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 /'目录中):

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
</asp:Content>

这是我的main.cpp文件的内容:

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

我的FileWriter.h:

#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.cpp:

#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_ */

2 个答案:

答案 0 :(得分:2)

这一行:

g++  -c -g -Wall  -o src/main.o src/FileWriter.cpp

应该是:

g++  -c -g -Wall  -o src/main.o src/main.cpp

答案 1 :(得分:0)

我无法访问此编译器,但过去如果您在C ++文件中有main(),则需要使用__cdecl

“装饰”它
int __cdecl main() {

试试吗?或者:

extern "C" int main() {