지난 날 링커 지옥에서 다루어졌으며 누군가가 나를 도울 수 있는지를 알기 위해이 곳을 던져 보았습니다.명시 적 링크가있는 경우에도 정의되지 않은 기호
저는 건물에있는 두 개의 공유 라이브러리가 있습니다. 하나는 "libhttp"이고 다른 하나는 HTTP 프로토콜에 대한 더 나은 기능 또는 나쁜 기능을위한 것입니다. 두 번째 문제는 "libvpcutil"이라고합니다. 그것은 libhttp에있는 심볼에 의존하므로 libhttp에 링크합니다.
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
컴파일 및 연결이 성공적으로 완료 : 여기에 OpenSSL을 총칭 내 개인적인 경로와 같은 사소한 것들로 (메이크 파일에서 폭발) 컴파일 지시자입니다. 다행히 http/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에 나노를 할 때 나는 기본적으로 얻을 : 나는 libhttp.so.1.0에 나노를 할 경우
이제, 내가 (다른 사람의 사이에) 다음과 같은 출력을 얻을 : 나는 분명히 여기 자르는 것은,하지만 난 여기에 붙어있어 여기서 기호는 명확 libhttp에 정의되어 있습니다 해요
U _ZN12http_cookiesC1Ev
U _ZN12http_cookiesD1Ev
U _ZN12http_headers11url_expressERSo
U _ZN12http_headers3setEPKcRKSs
U _ZN12http_headers3setEPKcS1_
U _ZN12http_headersC1Ev
U _ZN12http_headersD1Ev
, 나는 libvpcutil에 대한 반대 링크,하지만 기호는 libvpcutil에서 정의되지 않습니다. 이로 인해 런타임 오류가 발생합니다.
누구든지 문제를 알고 계십니까?
일반적으로 서명이 일치하지 않는다는 의미입니다. 함수가 선언되고 구현되고 호출되는 곳에서 소스 코드를 확인하십시오 (도움이 필요하면 여기에 넣으십시오). – littleadv
@littleadv, 서명이 일치하지 않으면 런타임 전에 오류가 발생하고 'nm' 출력을 보면 일치 할 수 있습니다. –
@JonathanWakely 우리는 다른 것들을보고 있다고 확신합니다. 질문에서, 당신은 두 개의'nm' 출력을 가지며, 과부하 된 매개 변수를 가진 함수들을 나열하고 오직 하나만 다른 것과 쌍을 이룹니다. – littleadv