假設你有一個共享庫A.so,而另一個共享庫B.so是按照A.so編譯的。換句話說,如何將用戶編譯的共享庫的共享庫鏈接到Debian上的C++應用程序?
ldd B.so
提到A.so.此外,假設A.so和B.so已經被我自己成功編譯,即它們位於我的主目錄中的某處。
現在,我有一個應用程序應用程序,我想對A.so和B.so進行編譯。因爲A.so包含在B.so中,所以我只想鏈接B.so。
所以,我在兩個不同的linux系統下做了這個。我嘗試了SLES 10 SP2和Debian 7.7.0(基本安裝,該系統沒有什麼特別之處)。在SLES 10 SP2上,這絕對沒有問題。在Debian,我得到像下面這樣的消息:
/usr/bin/ld: /tmp/ccjQFzpo.o: undefined reference to symbol '_ZN2sf7secondsEf'
A.so: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
A.so例如可以是我編自己一個Qt4函數庫。如果我使用apt-get install來安裝Qt4庫,那麼它可以工作。
我試圖A.so和B.so添加到由
ldconfig -v
即我已經能夠看到他們在此列表中給出的列表。它不能解決問題。
我錯過了什麼?
那麼,那麼如何安裝Qt,例如,與突觸,解決了我的問題(對於特定的庫)?我的意思是,如果A.so是libQtCore.so,並且我用突觸安裝了Qt,那麼我只需要鏈接B.so.我沒有收到DSO錯誤消息。 –