2011-12-06 157 views
2

我有一個名爲FOO的目錄,它具有X.a和X.so。我只想選擇X.a. 所以在我的makefile我使用下列到鏈接靜態庫而不是動態鏈接

EXE: OBJ.o 
    g++ -L/PATH/TO/FOO -o [email protected] $< -static -lX 

鏈接,但是當我這樣做,我得到以下錯誤

/usr/bin/ld: cannot find -lstdc++ 
/usr/bin/ld: cannot find -lm 
/usr/bin/ld: cannot find -lc 

如何來做好。一種方法是給X.a.有沒有其他的方法?

+1

鏈接器沒有發現Xa的問題,它抱怨其他庫。我認爲你也應該添加這些路徑(使用-L)。 – kol

回答

2

試試這個:

EXE: OBJ.o 
    g++ -L/PATH/TO/FOO -o [email protected] $< -Wl,-Bstatic -lX -Wl,-Bdynamic 
+0

謝謝Jack ...它的工作...你能解釋一下'-Wl,-Bstatic -lX的含義嗎 - Wl,-Bdynamic'? – amneet

+0

'-Wl,-Bstatic':'-Wl'表示該標誌需要發送給鏈接器,'-Bstatic'開啓靜態鏈接。 '-lX'是'libX'中鏈接的正常標誌。 '-Wl,-Bdynamic'發送'-Bdynamic'標誌給鏈接器,動態鏈接所有其他庫。 –

0

如果我正確地閱讀ld的文檔,您不必指定的絕對路徑,但你可以使用它的全名是這樣指定庫:

EXE: OBJ.o 
    g++ -L/PATH/TO/FOO -o [email protected] $< -l:X.a 
+0

這不起作用。錯誤: '/ usr/bin/ld:找不到X.a' – amneet

+0

至少這意味着鏈接器現在試圖鏈接到靜態庫,就像你想要的;不幸的是它找不到它。你確定-L交換機的路徑是正確的嗎? – eriktous

+0

是的,我很確定。 – amneet