다음과 같은 문제점이 있습니다. 나는 "libdsm"프로젝트의 기초 위에 작은 smb 클라이언트를 만들려고 노력하고있다. 필요한 라이브러리 (libdsm.a 및 libtasn1.a)를 빌드했습니다. 내 smb 클라이언트가 이러한 정적 라이브러리를 볼 수 있지만 링커는 내가 정의되지 않은 참조가 있음을 알립니다. 이 메시지는 분명하며 링크 된 정적 라이브러리가 존재하는지 확인했습니다. 왜 그런 일이 일어 났는지 전혀 알지 못합니다. 링커가 그 이유를 말해 줄 수 있습니까? 이 문제를 더 깊이 분석하기 위해 사용할 수있는 도구는 무엇입니까? 나는이 추가 정보를 유용하게 사용될 수 있기를 바랍니다작은 smb 클라이언트를 빌드하기위한 정의되지 않은 참조
ELF Header:
Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
Class: ELF64
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: REL (Relocatable file)
Machine: Advanced Micro Devices X86-64
Version: 0x1
Entry point address: 0x0
Start of program headers: 0 (bytes into file)
Start of section headers: 2744 (bytes into file)
Flags: 0x0
Size of this header: 64 (bytes)
Size of program headers: 0 (bytes)
Number of program headers: 0
Size of section headers: 64 (bytes)
Number of section headers: 15
Section header string table index: 12
Symbol table '.symtab' contains 26 entries:
Num: Value Size Type Bind Vis Ndx Name
12: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND _Z15smb_session_newv
13: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND inet_aton
14: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND _Z19smb_session_connectP1
15: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND _Z21smb_session_set_creds
16: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND _Z17smb_session_loginP11s
17: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND puts
18: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND _Z16smb_tree_connectP11sm
19: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND _Z9smb_fopenP11smb_sessio
20: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND _Z9smb_freadP11smb_sessio
21: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND _Z10smb_fcloseP11smb_sess
22: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND _Z19smb_tree_disconnectP1
23: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND _Z19smb_session_destroyP1
: 나는 아래 내 작은 SMB 클라이언트의 내장 라이브러리
File: libdsm.a(md4.o)
ELF Header:
Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
Class: ELF64
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: REL (Relocatable file)
Machine: Advanced Micro Devices X86-64
Version: 0x1
Entry point address: 0x0
Start of program headers: 0 (bytes into file)
Start of section headers: 15128 (bytes into file)
Flags: 0x0
Size of this header: 64 (bytes)
Size of program headers: 0 (bytes)
Number of program headers: 0
Size of section headers: 64 (bytes)
Number of section headers: 23
Section header string table index: 20
17: 0000000000000000 97 FUNC GLOBAL DEFAULT 1 smb_session_new
18: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND calloc
19: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND smb_buffer_init
20: 0000000000000070 93 FUNC GLOBAL DEFAULT 1 smb_session_destroy
21: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND smb_session_share_clear
22: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND asn1_delete_structure
23: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND smb_buffer_free
24: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND free
25: 00000000000000d0 141 FUNC GLOBAL DEFAULT 1 smb_session_set_creds
26: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND __strndup
27: 0000000000000160 463 FUNC GLOBAL DEFAULT 1 smb_session_connect
28: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND smb_transport_nbt
및 객체 파일에 대한 readelf 정보를 보여줍니다.
오류 메시지를 복사하여 붙여넣고 해당 오류 메시지를 생성 한 연결 단계에서 사용한 명령 줄을 복사/붙여 넣기하십시오. (연결 순서에 문제가있을 수 있습니다. 화면에서 볼 수있는 것과 똑같은 것을 볼 때 진단하기가 훨씬 쉽습니다.) – nos
일반적으로 libs는 GCC의 명령 행에 있습니다. – alk
g ++ -m64 -Wl, -O1 -o tinysmbclient main.o -L/usr/lib/x86_64-linux-gnu -lQtGui -lQtCore -lpthread main.o : 함수'main '에서 : main.cpp :((smb_session *, char const *, unsigned int, int) '에 대한 정의되지 않은 참조' – Mikola