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

G++ Makefile 編譯鏈接錯誤:缺少 -c 參數導致目標文件直接生成可執行文件失敗

     編輯:程式設計綜合問答

錯誤 Makefile

HelloWorld: main.o print.o
    g++ -o HelloWorld print.o main.o

main.o: main.cpp print.h
    g++ -o main.o main.cpp  # 錯誤:產生可執行文件而非目標文件

print.o: print.cpp print.h
    g++ -o print.o print.cpp

原因

g++ -o main.o main.cpp 企圖直接生成可執行文件 `main.o`,但 `main.cpp` 包含 `main()`,缺少 `print()` 定義,鏈接失敗報 undefined reference to 'main' (實際是 `print` 未定義)。

正確參數

  • -c:僅編譯生成目標文件 .o,**不鏈接**。
  • -o:指定輸出文件名。

修正 Makefile

CXX = g++
CXXFLAGS = -Wall -std=c++11

HelloWorld: main.o print.o
    $(CXX) -o HelloWorld main.o print.o

main.o: main.cpp print.h
    $(CXX) $(CXXFLAGS) -c -o main.o main.cpp

print.o: print.cpp print.h
    $(CXX) $(CXXFLAGS) -c -o print.o print.cpp

.PHONY: clean
clean:
    rm -f *.o HelloWorld

關鍵點

**編譯 (-c) 與鏈接 分離**,目標文件 `.o` 只包含編譯單元符號,最終鏈接階段解析所有符號生成可執行文件。

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