2017-12-29 92 views
0

다음과 같은 문제점이 있습니다. 나는 "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 정보를 보여줍니다.

+1

오류 메시지를 복사하여 붙여넣고 해당 오류 메시지를 생성 한 연결 단계에서 사용한 명령 줄을 복사/붙여 넣기하십시오. (연결 순서에 문제가있을 수 있습니다. 화면에서 볼 수있는 것과 똑같은 것을 볼 때 진단하기가 훨씬 쉽습니다.) – nos

+0

일반적으로 libs는 GCC의 명령 행에 있습니다. – alk

+0

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

답변

0

alk, 상담해 주셔서 감사합니다. main.cpp를 main.c로 이름을 바꾸면 모두 Ok입니다. 내게는 클라이언트를 C 또는 C++ 프로그램으로 컴파일하는 것은 중요하지 않습니다.