0
在automake的,我有一個第三方的靜態庫,我在它上面建立一個靜態庫,我想在我的庫靜態鏈接可執行使用:靜態庫包括在內,但符號懸而未決
libthird.a, libmy.a, progs...
我編譯libmy.a用(Makefile.am):
noinst_LIBRARIES = libmy.a
...sources...
libmy_a_LIBADD = libthird.a
當我編譯和鏈接調用libmy功能前衛,它拒絕連接,通過libmy使用的所有libthird符號給未解決的錯誤。
作爲一個嘗試,我換成
與
libmy_a_LIBADD = $(LIB_THIRD_OBJS)
即明確從libthird.a構建的目標文件,和它的作品。第一種情況我做錯了什麼? libmy.a包含在第一種情況下libthird.a(即less libmy.a
顯示對象文件和libthird.a)
至於另一次嘗試,我跑ar
上libmy.a,餵養它libthird.a,生產libmyA.a,並且這也適用:與libmyA.a鏈接的progs已經正確解析了libthird符號。
還是不可能,因爲(我認爲)在這裏解釋:Embed all external references when creating a static library?
謝謝。我的問題不是很好。我編輯它以更好地反映我在做什麼。你說的話在我最初描述的情況下會起作用,但是我需要libmy.a來包含libthird符號,因爲我要在我描述的makefile之外鏈接程序。 – user907323
然後'libmy.a'可能不應該是一個便利的庫。你說:「我需要libmy.a來包含libthird符號,因爲我要在我描述的makefile之外鏈接程序。」 _不在lib中有libthird符號不會阻止 - 它們只會鏈接'libmy.a'和'libthird.a'。或者像[this](https://stackoverflow.com/a/23432530/425738)將靜態庫組合成一個他們可以鏈接的庫(就像你說的那樣)。這是你用靜態庫獲得的基本選擇。 – ldav1s
謝謝,後者是我正在尋找的。至於將可執行文件與'libmy.a'和'libthird.a'鏈接起來 - 這是我想避免的,因爲'libmy.a'是'libthird.a'的低級實現之上的抽象。 – user907323