首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Linux g++ 編譯多文件項目:未定義引用錯誤的原因與解決

     編輯:程式設計綜合問答

現象

VS 下正常的代碼移植到 Linux,g++ main.cpp 報錯 undefined reference to `Person::Person(...),但將 Person 類代碼直接寫在 main.cpp 前則正常。

原因

g++ main.cpp **僅編譯 main.cpp**,Person.cpp 未參與編譯,鏈接階段找不到 Person 的構造函數、成員函數定義,導致「未定義的引用」。

解決方法

  1. 一次性編譯鏈接所有源文件:
    g++ main.cpp Person.cpp -o main
  2. 分步編譯鏈接(大型項目推薦):
    g++ -c main.cpp -o main.o
    g++ -c Person.cpp -o Person.o
    g++ main.o Person.o -o main
  3. 使用 Makefile/CMake 自動化構建:避免手動敲命令,管理依賴關係。

對比 VS

VS 專案系統自動將專案內所有 .cpp 加入編譯單元,開發者無感知;Linux 手動編譯需顯式列出所有源文件或構建腳本。

補充提示

  • 頭文件 Person.h 僅提供聲明,**定義必須在 .cpp 中**並參與編譯。
  • 模板類/函數定義通常放在頭文件(或 .inl 包含),因實例化需在編譯期可見。

習慣寫 Makefile 或用 CMake,是 Linux C++ 開發的基本功。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved