2013-04-26 134 views
1

我一直在研究一個名爲RoboJournal的程序,最近我完成了0.4.1版本。我目前正在爲Fedora打包它,但由於某些原因,該程序無法在該操作系統上編譯。在Windows和任何基於Debian的Linux(Debian本身,Ubuntu,Mint等)上,完全相同的代碼可以很好地構建。對於Debian來說,我沒有任何問題。以下是編譯器輸出錯誤信息(在Fedora 18 KDE版本上運行):Fedora編譯(依賴?)錯誤

/usr/bin/ld: dblogin.o: undefined reference to symbol 'XkbGetIndicatorState' 
/usr/bin/ld: note: 'XkbGetIndicatorState' is defined in DSO /lib64/libX11.so.6 so try adding it to the linker command line 
/lib64/libX11.so.6: could not read symbols: Invalid operation 
collect2: error: ld returned 1 exit status 

這個問題似乎是鏈接器無法找到任何被認爲控制XkbGetIndicatorState信號(X11庫之一) 。這用於確定某個對話框處於活動狀態時是否啓用大寫鎖定。顯然,任何基於Debian的版本都包含這個開箱即用的庫,而Fedora則沒有。我認爲這個錯誤只是由一個丟失的包引起的,但我不確定哪一個。 Google沒有給我任何幫助。有任何想法嗎?

任何想要自己測試的人都可以從git://github.com/pwizard2/robojournal.git克隆。該應用程序依賴於以下包(到目前爲止):qt,qt-assistant,qt-mysql,qt-devel,qt-webkit,qt-webkit-devel。

+0

如果Fedora上沒有X11運行時庫,那麼我會感到非常驚訝...不應該是'/ usr/lib64/libX11.so'嗎? – cmannett85 2013-04-26 07:13:08

+1

由於usrMerge特性在'/ lib64'中進行,'/ usr/lib64'在Fedora上是同樣的事情 - 第一個是到第二個的鏈接。 – TomH 2013-04-26 08:02:12

回答

2

問題可能是您沒有將您的程序與libX11鏈接,因此您需要將-lX11添加到您的鏈接命令中,然後所有內容都可以正常工作。

它在其他一些Linux發行版上工作的原因是它們允許使用僅間接拉取的庫來解析符號 - 所以如果程序鏈接到與libX11鏈接的庫,那麼您將能夠請致電libX11

Fedora不允許這種間接連接(默認情況下)已經有好幾年了(見UnderstandingDSOLinkChange),其他一些發行版也已經跟上。

+0

我仍然無法完成這項工作。我已經在makefile中爲受影響的類添加了-lX11:「$(CXX)-c $(CXXFLAGS)$(INCPATH)-lX11 -o dblogin.o ui/dblogin.cpp」,但我仍然遇到此錯誤。我究竟做錯了什麼? – 2013-04-26 23:28:37

+0

您正在將標誌添加到錯誤的地方。帶'-c'的命令用於編譯,它忽略鏈接器標誌。您需要修改生成可執行文件/ – 2013-05-04 19:54:14

+0

的命令。我通過將-lX11放在makefile的標題部分來實現此目的。謝謝您的幫助。 – 2013-05-06 22:40:10