我對Linux比較陌生,在試圖弄清.SO文件的複雜性以及(64位)共享庫(及其版本,依賴關係等)如何工作時遇到了困難;以及如何鏈接它們並在基本的C++程序中使用它們?如何在Linux中調用或使用64位共享庫(.SO)文件?
這種情況是這樣的:我有一個名爲libfaidtz.so.3.0.0_debian6_64bit的共享庫文件(單個物理文件)。我在VMWare上安裝了Debian(最新版本)64位。我已經安裝(我相信)所有基本的C++開發工具都使用apt-get。
現在我想用C++編寫一個簡單的程序,該程序將鏈接libfaidtz.so.3.0.0_debian6_64bit,並使我能夠通過此.so文件調用兩個「導出」特定函數。不幸的是,我的機器上設置的環境/系統阻止我成功鏈接到這個庫。
任何人都可以在此引導我嗎?
我已經在下面列出了一些與.SO文件相關的細節。我想用(從.so文件)的函數具有以下功能的原型(應該工作):
int32_t DEF_EXPORT TZ_FAID_Size(int64_t start_time,
int32_t roster_count,
int64_t * roster_from,
int64_t * roster_to,
int32_t * roster_ids,
int32_t & id_cnt);
我從Windows背景是(動態鏈接和DLL明智)和我在努力得到這個.SO文件喜歡並用於基本的C++測試程序。
[email protected]:/home/maitreya/lib# ldd libfaidtz.so.3.0.0_debian6_64bit
linux-vdso.so.1 => (0x00007fff667ff000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f3300a6f000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f33007ed000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f3300461000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f330024b000)
/lib64/ld-linux-x86-64.so.2 (0x00007f3300f93000)
[email protected]:/home/maitreya/lib# nm libfaidtz.so.3.0.0_debian6_64bit
0000000000208c70 d DW.ref.__gxx_personality_v0
0000000000006ebb T TZ_FAID_Process
0000000000006e04 T TZ_FAID_Size
0000000000007447 T TZ_FAID_Version
0000000000208028 a _DYNAMIC
0000000000208230 a _GLOBAL_OFFSET_TABLE_
w _Jv_RegisterClasses
00000000000011ca T _Z15FetchExpiryDatePiS_S_
等..
」不幸的是,我的機器上設置的環境/系統阻止我成功鏈接到此庫。「 - 你的命令行是什麼?你會得到什麼錯誤? – Axel
我試過很多次(設法將它連接一次,但是生成的二進制文件沒有執行。)目前,我將.SO和我的示例程序放在同一個文件夾中,並使用:g ++ useFAID .cc -L。 -lfaidtz.so.3.0.0_debian6_64bit -o test /usr/bin/ld:找不到-lfaidtz.so.3.0.0_debian6_64bit。我試過運行ldconfig並更新環境變量等。還嘗試更新GLIBC庫(32位)的味道。我得到的當前錯誤是:「/ usr/bin/ld:無法找到-lfaidtz.so.3.0.0_debian6_64bit collect2:錯誤:ld返回1退出狀態」 – BuddhaLight
嗨,我設法解決這個幫助下很少人。謝謝大家。我採取的步驟是:1)將實際的共享庫文件(.SO)放在/ usr/lib文件夾中。 2)在同一個文件夾中爲它創建一個SOFT鏈接。 3)運行ldconfig -v(更新庫緩存)4)在我自己的文件夾中重建我的C++程序。 5)它運行並完成。 – BuddhaLight