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が情報を表示します。
取得したエラーメッセージをコピーして貼り付け、リンクステージで使用したコマンドラインをコピーして貼り付けてください。 (リンクの順序に問題があるかもしれません。画面上に表示されているものと同じものが見えるときに診断するのがずっと簡単です) – 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