我剛剛建立了一個共享庫,但是當我使用納米命令查找依賴輸出如下納米輸出不正確
$ nm -a libgio-2.0.so.0.2701.0 | grep ZLIB
U [email protected]@ZLIB_1.2.2
U [email protected]@ZLIB_1.2.2
我不知道均值的@@ZLIB_1.2.2
,實際上建築libgio的命令是
gcc -o libgio-2.0.so.0.2701.0 libfoo.so libbar.so libz.so.1.2.8
其中libz.so.1.2.8
從我自己的源建成並投入libgio-2.0.so.0.2701.0的同一目錄下。這不是同一版本系統的libz進行(/usr/lib/libz.so)
所以,我的問題是,爲什麼@@zlib
的nm
輸出1.2.2
,不1.2.8
? nm輸出的@@ZLIB_1.2.2
的平均值是多少?
感謝
您可能會澄清,開發人員在構建庫時選擇'ZLIB',並且它不一定是庫的*名稱*。 –
感謝喬納森和托馬斯的詳細評論。所以@@版本不是實際的鏈接庫的版本,而是符號的版本。在我的情況下,該程序仍然鏈接zib 1.2.8,而不是1.2.2,這是正確的嗎? –
該程序將鏈接到任何鏈接它(以及運行時加載程序在運行時發現的內容)。使用'nm'不能告訴你程序鏈接到哪個庫,它只能顯示你缺少的符號。 'deflateSetHeader @@ ZLIB_1.2.2'只是一個符號的名字(裝飾着一些額外的信息,使它不同於'deflateSetHeader @@ ZLIB_0.1.1')。要查看程序鏈接的庫,請使用'ldd'而不是'nm'。 –