[英]simple c++ code does not compile (linker command failed with exit code 1)
[英]C++ Can't compile simple class header (linker command failed with exit code 1)
問題似乎出在我使用的編譯器上,盡管我對編程還很陌生,所以我不確定如何解決這個問題(我在 Mac OSX 上使用 VSCode)
這是我的標題:
#ifndef STICKMAN_H
#define STICKMAN_H
class Stickman{
public:
Stickman();
};
#endif
這是我的源文件:
#include "stickman.h"
#include <iostream>
using namespace std;
Stickman::Stickman(){
cout << "Hello\n";
}
這是我的主要內容:
#include "stickman.h"
#include <iostream>
int main(){
Stickman figure;
}
這是終端中的錯誤消息:
Alexandres-MBP:Game alexandrecarqueja$ cd
"/Users/alexandrecarqueja/Desktop/Game/" && g++ main.cpp -o main && "/Users/alexandrecarqueja/Desktop/Game/"main
Undefined symbols for architecture x86_64:
"Stickman::Stickman()", referenced from:
_main in main-d38641.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
您需要改為調用它:
g++ main.cpp stickman.cpp -o main
這也將編譯stickman.cpp
。 然后鏈接器將知道該怎么做。 現在你的 main 中有一個#include stickman.h
,它聲明了這個類,但沒有定義它。
鏈接器看到聲明了一個構造函數(在stickman.h
),但沒有看到它是如何實現的( stickman.cpp
沒有被編譯)。 因此它無法與構造函數體鏈接。
它必須是特定於編譯器的,因為我在 Visual Studio 中運行了代碼並成功構建了它。 如果您碰巧有一台 Windows 計算機,我建議您獲得免費的 express/community Visual Studio 2017 IDE 軟件。 代碼看起來不錯,所以我個人不確定是什么導致了你的問題,如果它與編譯器無關。 如果您只有一台 Mac 計算機,那么我建議您可以查看其他免費編譯器。
如果您的項目的路徑包含空格,您也會在 vscode 中收到此錯誤。 如上所述,您還需要編譯所有 cpp 文件。
要在例如 macOS Catalina 中的 vscode 中執行此操作,請在此處查看我的答案https://stackoverflow.com/a/61331301/1071899
基本上你需要用編譯器特定的標志制作一個 tasks.json 文件。 在這里,您需要包含應編譯所有 *.cpp 文件,並且您需要通過添加"\\"${workspaceFolder}\\"/*.cpp",
而不是"${file}",
來轉義空格。 注意兩個\\"
。這將確保您的項目路徑被""
包圍,並且不會抱怨鏈接器錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.