簡體   English   中英

g ++鏈接錯誤:“對'main'的未定義引用

[英]g++ link error: 'undefined reference to 'main'

我有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;
}

這行:

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

應該:

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

我沒有訪問此編譯器的權限,但是在過去,如果您在C ++文件中有main() ,則需要使用__cdecl “修飾”它

int __cdecl main() {

試試吧 要么:

extern "C" int main() {

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM