2009-11-09 73 views
1

我收到以下錯誤,當我嘗試編譯我的應用程序:沒有規則,使目標...... libm.a

*** No rule to make target `/mypath/lib/libm.a', needed by `/myPath/bin/appName' 

爲什麼是根據絕對路徑鏈接找libm.a?

+0

你需要發佈你的makefile來找出它有什麼問題。 – kdt 2009-11-09 20:45:52

+0

他 - 他,我敢打賭他不需要*,但肯定會對他很好:) – 2009-11-09 20:54:05

+0

那麼,Nathan,有什麼意見?代碼示例不起作用?什麼? – 2009-11-10 16:38:40

回答

4

我開始交換臺節目通靈事業的思考...

爲什麼是根據絕對路徑鏈接找libm.a?

因爲你讓他這麼做。最有可能您已輸入

# There were some rules that build your own .a libs 
myLib.a: ... 
    ... 

# Handy rule to direct your libs into lib/ folder! 
vpath %.a /mypath/lib 

appName: appName.o libm.a 
    g++ $^ -o [email protected] 

哎呀!你需要「系統」libm.a(這是一個數學庫,glibc的一部分),但make認爲你需要你自己的靜態庫。然後它添加適當的前綴並且沒有找到任何規則來重製libm.a

解決方案可能會將libm.a移出先決條件。這是配置腳本或特殊目標來檢查系統庫的存在的目的。

EXT_LIBS=libm.a 

appName: appName.o 
    g++ $^ $(EXT_LIBS) -o [email protected] 
+0

錯誤消息來自make,而不是來自鏈接器,所以這個答案很可能是正確的。 – 2009-11-11 06:11:51