過去一天在連接器地獄中處理,並認爲我會把它扔出去,看看有沒有人可以幫助我。未定義的符號,即使有明確的鏈接
我有兩個我正在構建的共享庫:一個叫做「libhttp」,它有一些http協議的幫助函數,它似乎是爲了更好或更差而構建的。第二個叫做「libvpcutil」,它導致了這個問題。它取決於libhttp中的符號,因此我將它與libhttp鏈接起來。以下是編譯指令(從make文件爆炸)與小事情像我個人的路徑OpenSSL的泛型:
g++ -shared -Wl,-soname,libvpcutil.so.1 -o libvpcutil.so.1.0 vpcreg/registry.o \
vpcreg/vpcreg2.o dbase/dbase.o dbase/sqlutils.o diaglog/diaglog.o errmsg/errmsg.o \
faillib/faillib.o failover/failover.o initerr/init_err.o kmq/kmq.o kmq/publish.o \
kthread/kcom.o kthread/kthread.o libobdi/odi_serv.o mutex/mutex.o netserv/netserv.o \
newmem/newmem.o rmtstore/avlmem.o rmtstore/rmtstore.o rmtstore/shm_aloc.o \
servhand/servhand.o timers/timers.o vpcstamp/vpcstamp.o websql/websql.o types/blob.o \
types/hitime.o types/ticks.o types/timestamp.o odasm/odasm.o webvibapi/webvibapi.o \
vibusfeed/vibusfeed.o propstore/propstore2.o cardlib/cardlib.o cardlib/sortlist.o \
gapi/genapi.o -L/usr/lib/i386-linux-gnu -lm -lrt -lxml2 -lodbc -L/usr/lib/i386-linux-gnu -\
lcurl -Wl,-Bsymbolic-functions -Wl,-z,relro \
-L/pathtoopenssl/openssl -lssl -lcrypto -lxml2 -lreadline -\
lcurses -Wl,-rpath=.:/pathtobin/bin http/libhttp.so.1.0 ../ddldata/ddldata.o
../cardddl/cardddl.o ../gendata/generic.o
編譯和連接成功完成。希望您注意到http/libhttp.so.1.0的鏈接步驟。現在
,如果我做一個納米上libhttp.so.1.0,我得到下面的輸出(其中包括):
00015d5a T _ZN12http_cookiesC1Ev
00015d5a T _ZN12http_cookiesC2Ev
00015d7e T _ZN12http_cookiesD1Ev
00015d7e T _ZN12http_cookiesD2Ev
00011574 T _ZN12http_headers11url_expressERSo
00011466 T _ZN12http_headers12http_expressERSo
但是當我做了納米上libvpcutil.so.1.0我得到實質上:
U _ZN12http_cookiesC1Ev
U _ZN12http_cookiesD1Ev
U _ZN12http_headers11url_expressERSo
U _ZN12http_headers3setEPKcRKSs
U _ZN12http_headers3setEPKcS1_
U _ZN12http_headersC1Ev
U _ZN12http_headersD1Ev
我顯然這裏剪斷,但如果我被困這裏是符號在libhttp明確的規定,我反對它鏈接以libvpcutil,但隨後的符號在libvpcutil不確定。這會產生運行時錯誤。
任何人都看到這個問題?
它通常意味着簽名不匹配。檢查函數聲明,實現和調用的源代碼(並將其放在此處,如果需要任何幫助)。 – littleadv 2012-08-08 22:41:42
@littleadv,如果簽名不匹配,則錯誤會在運行時發生,您可以通過查看「nm」輸出來查看它們是否匹配。 – 2012-08-09 08:35:07
@JonathanWakely我相信我們正在尋找不同的東西。在這個問題中,你有兩個'nm'輸出,其中列出了一堆帶有超載參數的函數,並且只有一個與另一個配對。 – littleadv 2012-08-09 08:42:35