2011-01-23 48 views
1

我在我的Mint Linux安裝上編譯了一些C代碼時出現了一些編譯錯誤。編譯期間共享庫版本不匹配?

錯誤是所有版本不匹配問題。

這裏的「做錯誤」一節:

/usr/bin/ld: warning: libthread.so.1, needed by /home/lynton/Backup/Logosworld/IBM/Websphere MQ for Solaris x86 64bit/CZRV9ML/mqm/root/opt/mqm/lib64/libmqm.so, not found (try using -rpath or -rpath-link) 
/usr/bin/ld: warning: libsocket.so.1, needed by /home/lynton/Backup/Logosworld/IBM/Websphere MQ for Solaris x86 64bit/CZRV9ML/mqm/root/opt/mqm/lib64/libmqm.so, not found (try using -rpath or -rpath-link) 
/usr/bin/ld: warning: libc.so.1, needed by /home/lynton/Backup/Logosworld/IBM/Websphere MQ for Solaris x86 64bit/CZRV9ML/mqm/root/opt/mqm/lib64/libmqm.so, not found (try using -rpath or -rpath-link) 
/usr/bin/ld: warning: libdl.so.1, needed by /home/lynton/Backup/Logosworld/IBM/Websphere MQ for Solaris x86 64bit/CZRV9ML/mqm/root/opt/mqm/lib64/libmqm.so, not found (try using -rpath or -rpath-link) 
/home/lynton/Backup/Logosworld/IBM/Websphere MQ for Solaris x86 64bit/CZRV9ML/mqm/root/opt/mqm/lib64/libmqm.so: undefined reference to `xihThreadKey' 
/home/lynton/Backup/Logosworld/IBM/Websphere MQ for Solaris x86 64bit/CZRV9ML/mqm/root/opt/mqm/lib64/libmqm.so: undefined reference to `xcsCreateThreadMutexSemX' 
/home/lynton/Backup/Logosworld/IBM/Websphere MQ for Solaris x86 64bit/CZRV9ML/mqm/root/opt/mqm/lib64/libmqm.so: undefined reference to `thr_getspecific' 
/home/lynton/Backup/Logosworld/IBM/Websphere MQ for Solaris x86 64bit/CZRV9ML/mqm/root/opt/mqm/lib64/libmqm.so: undefined reference to `xcsReleaseThreadMutexSem' 
/home/lynton/Backup/Logosworld/IBM/Websphere MQ for Solaris x86 64bit/CZRV9ML/mqm/root/opt/mqm/lib64/libmqm.so: undefined reference to `xcsRequestThreadMutexSem' 
collect2: ld returned 1 exit status 
make: *** [idoclink_outbound] Error 1 

因此,例如,它抱怨「libsocket.so.1」而我有的只是「libsocket.so.0」?

C開發人員通常如何解決這類問題?有什麼辦法可以下載那些抱怨的特定庫嗎?

感謝您的幫助;-)

林頓

+3

您似乎嘗試在Linux上使用Solaris版本的Websphere MQ ... Solaris可能使用libmqm.so正在查找的版本號,而Linux不會。但是,僅僅更改版本號不會使編譯的Sparc對象代碼在Linux下運行。 – 2011-01-23 16:44:18

+0

你們100%是正確的.....你看到發生了什麼是我的機器上的Solaris UNZIPPED Websphere MQ文件夾的「副本」以及..... DEEP在我的文件夾結構中。然後,當我在Code Blocks中工作時,我搜索了「libmqm.so」,並在那個愚蠢的solaris文件夾中找到了錯誤的lib ... aaarrgg。我已經指出正確的lib,並且所有編譯100%。再次感謝您的幫助; _) – 2011-01-24 08:15:41

回答

4

你試圖編譯Linux上的Solaris版編寫的代碼,既不構建系統,也沒有代碼已正確條件化,使這個工程。線索之一是構建目錄的名稱 -

.../Websphere MQ for Solaris x86 64bit/... 

線索二是,它似乎已經硬了一堆Solaris的特定動態庫的名稱(Linux不一個的libthread或作爲的libsocket據我所知,它的libc和libdl不使用這些sonames - 我不知道你在哪裏得到libsocket.so.0,但它可能是什麼程序正在尋找完全不同)和線索三是

libmqm.so: undefined reference to `thr_getspecific' 

其中thr_getspecific是一個明確不可移植的Solaris專用庫例行程序(便攜式等效物爲pthread_getspecific,但移植不僅僅是更改代碼中名稱的問題)。

回到代碼的任何位置,看看它們是否有Linux變體。如果他們不這樣做,你可能會在你面前做很多工作。

+0

交叉編譯_is_可能,但它意味着託管一個單獨的C庫和工具鏈。 – 2011-01-23 18:09:52

0

WebSphere MQ庫可用於服務器或客戶端安裝。 C開發人員通常會通過實際安裝WMQ軟件來解決此類問題。即使假設你設法解壓縮了正確的WMQ庫,如果它們沒有安裝到預期的位置,你將有可怕的時間編譯。例如,WMQ消息目錄安裝到NLS目錄中,並在編譯期間被引用。您可以使用指向每個庫的編譯器選項解決所有的依賴關係,但安裝該軟件會更快更輕鬆。

如果您只需要客戶端庫,可以免費下載爲SupportPac MQC7,儘管需要註冊。如果您需要服務器庫,則需要購買WMQ服務器或downloaded the trial。主要區別在於服務器庫可以使用共享內存連接到本地QMgr,並且客戶端庫始終通過網絡連接。如果您需要XA事務性,則無論您如何連接,都需要服務器許可證。 XA功能是WMQ服務器分配的一部分,並在使用它的每個節點上承擔許可證義務。

安裝完成後,您應該能夠編譯程序,前提是您擁有諸如正確的libstdC++之類的所有prereq庫。這些要求在WMQ Detailed System Requirements頁面按平臺列出。最後,有關如何在Infocenter主題中爲Linux上的WebSphere MQ構建程序的詳細說明,該主題名稱足夠恰當,Building your application on Linux。本節提供示例編譯命令,庫路徑要求等。