我正在創建一個實用程序,取決於libassuan
撇開其他依賴。雖然這些'其他'提供共享庫,但libassuan
只有靜態的。便攜式方式靜態鏈接到其中一個庫
libassuan
都配備了簡單libassuan-config
工具,它旨在爲編譯器/連接器使用提供CFLAGS
& LDFLAGS
。這些LDFLAGS
將該庫稱爲-lassuan
。
化妝的標準調用的結果則是:
cc -I/usr/include/libmirage -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -lmirage -lglib-2.0 -L/usr/lib64 -lassuan -o mirage2iso mirage2iso.c mirage-getopt.o mirage-wrapper.o mirage-password.o mirage-password.o: In function `mirage_input_password': mirage-password.c:(.text+0x1f): undefined reference to `assuan_pipe_connect' mirage-password.c:(.text+0x32): undefined reference to `assuan_strerror' collect2: ld returned 1 exit status make: *** [mirage2iso] Error 1
(我剛開始寫這個單元,這就是爲什麼有沒有更多的錯誤)
所以,如果我理解結果正確,gcc不想將該應用鏈接到libassuan.a
。
使用-static
這裏會導致gcc優先選擇靜態庫而不是縮進的shared。我見過的解決方案建議使用類似的東西:
-Wl,-Bstatic -lassuan -Wl,-Bdynamic
但我不認爲這將是一個便攜式。
我認爲最好的解決方案是提供靜態庫文件的完整路徑,但libassuan-config
沒有提供太多的幫助(我可以從中得到的是-L/usr/lib64 -lassuan
)。
也許我應該嘗試通過「解析」來創建靜態庫的路徑返回LDFLAGS
和使用-L
目錄名和-l
的庫名 - 然後希望在所有情況下libassuan-config
將返回它這樣。
您對此有何看法?有沒有好的,簡單的便攜式解決方案來解決這個問題?
PS。請注意,雖然我在這裏指的是gcc,但我想使用能夠與其他編譯器一起工作的東西。
PS2。還有一個問題:如果包只安裝靜態庫,返回LDFLAGS
而不是完整的.la
路徑可以被認爲是一個錯誤?
非常感謝你,將'LDFLAGS'移動到命令行結束後,一切正常。雖然'libassuan-config'沒有像pkg-config一樣提供拆分'LDFLAGS'&'LIBS'。 – 2009-09-03 18:23:18