首頁
編程語言
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    # 錯誤:未加 -c,嘗試生成可執行文件

print.o: print.cpp print.h
    g++ -o print.o print.cpp  # 同理

報錯:`/usr/lib/.../crt1.o:在函數‘_start’中:對‘main’未定義的引用` —— 因編譯器嘗試鏈接生成可執行文件 `main.o`,但 `main.cpp` 無 `main` 函數(在 `print.cpp` 中)。

修正 Makefile

CXX = g++
CXXFLAGS = -Wall -g

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

main.o: main.cpp print.h
    $(CXX) $(CXXFLAGS) -c main.cpp -o main.o   # -c 僅編譯不鏈接

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

clean:
    rm -f *.o HelloWorld

參數解析

  • -c:僅預處理、編譯、匯編,**生成目標文件 (.o)**,不進行鏈接。
  • -o:指定輸出文件名(此處指定 `.o` 文件)。
  • 鏈接階段由最終目標規則完成,將所有 `.o` 合並為可執行文件。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved