歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Fedora 13下編譯libfetion的問題和解決辦法

Fedora 13下編譯libfetion的問題和解決辦法

日期:2017/2/28 16:34:36   编辑:Linux教程
前幾日升級到了Fedora 13,今天嘗試裝一下libfetion,可以在inux下使用中國移動飛信,先到libfetion官方網站下載最新V1.2版的源代碼,下載地址為:
http://web.libfetion.org/Linux_demoapp_download.php
按照官方網站提供的編譯方法(詳見http://web.libfetion.org/Docs-dve/Build-LibFx-on-Fedora.txt)
1、先安裝編譯環境(在root用戶下,下同)
yum install qt4-devel curl-devel gcc glibc-devel
2、然後解壓縮
tar -zxvf linux-fetion-v1.2.tar.gz
3、進入解壓後的文件夾
cd linux-fetion-v1.2
4、運行編譯命令
qmake-qt4
make
5、最後運行安裝程序
./install.sh

但是在執行第四步的時候,make之後出現如下錯誤:
g++ -Wl,-O1 -o linux-fetion .tmp/main.o .tmp/fxmain.o .tmp/fxloginwindow.o .tmp/fxmainwindow.o .tmp/fxbuddy.o .tmp/fxbuddyManage.o .tmp/fxmsgwindow.o .tmp/fxaccountTab.o .tmp/fxmytabwidget.o .tmp/fxResource.o .tmp/fxdb.o .tmp/fxcontactinfo.o .tmp/fxaddBuddyWindow.o .tmp/fxqunwindow.o .tmp/fxEncrypt.o .tmp/fxshowHistory.o .tmp/fxverifyAccount.o .tmp/fxInputFace.o .tmp/fxproxy.o .tmp/fxrefuseSMS.o .tmp/fxsendGroupSMS.o .tmp/fxscheduleSms.o .tmp/fxscheduleSmsManage.o .tmp/fxsettings.o .tmp/fxconfigDlg.o .tmp/fxskinmanage.o .tmp/fxwidget.o .tmp/fxwidgettitlebar.o .tmp/qlayoutengine.o .tmp/qwidgetresizehandler.o .tmp/sqlite3.o .tmp/fxlocationparser.o .tmp/moc_fxmain.o .tmp/moc_fxmainwindow.o .tmp/moc_fxloginwindow.o .tmp/moc_fxbuddy.o .tmp/moc_fxbuddyManage.o .tmp/moc_fxmsgwindow.o .tmp/moc_fxaccountTab.o .tmp/moc_fxmytabwidget.o .tmp/moc_fxcontactinfo.o .tmp/moc_fxaddBuddyWindow.o .tmp/moc_fxqunwindow.o .tmp/moc_fxshowHistory.o .tmp/moc_fxverifyAccount.o .tmp/moc_fxInputFace.o .tmp/moc_fxproxy.o .tmp/moc_fxLableMouse.o .tmp/moc_fxLineEditFocus.o .tmp/moc_fxrefuseSMS.o .tmp/moc_fxsendGroupSMS.o .tmp/moc_fxscheduleSms.o .tmp/moc_fxscheduleSmsManage.o .tmp/moc_fxsettings.o .tmp/moc_fxconfigDlg.o .tmp/moc_fxwidget.o .tmp/moc_fxwidgettitlebar.o .tmp/moc_qwidgetresizehandler_p.o .tmp/moc_fxusertree.o .tmp/moc_fxeditablelabel.o .tmp/moc_fxlocationparser.o -lcurl -lssl ./libfetion/lib/libfetion_32.a -lQtXmlPatterns -lQtXml -lQtGui -lQtCore -lpthread
/usr/bin/ld: .tmp/sqlite3.o: undefined reference to symbol 'dlopen@@GLIBC_2.1'
/usr/bin/ld: note: 'dlopen@@GLIBC_2.1' is defined in DSO /lib/libdl.so.2 so try adding it to the linker command line

/lib/libdl.so.2: could not read symbols: Invalid operation
collect2: ld 返回 1
make: *** [linux-fetion] 錯誤 1

大致意思是 .tmp/sqlite3.o引用了一個未定一的符號 'dlopen@@GLIBC_2.1', 'dlopen@@GLIBC_2.1'在/lib/libdl.so.2中定義,嘗試將/lib/libdl.so.2加入到連接器命令中

在百度和google搜了一圈,有人給出一個fedora官方的地址:
fedoraproject.org/wiki/UnderstandingDSOLinkChange
進去看了一下,大致的意思是說這是fedora13的一個bug,如果你的程序需要引用libA和libB,而libB又需要引用libA,那麼你的程序可能只會連接libB。
於是上面報錯的意思應該是程序需要.tmp/sqlite3.o,而.tmp/sqlite3.o需要的東西又在/lib/libdl.so.2中,因此程序找不到/lib/libdl.so.2。
根據官方的建議,只要在gcc的-o參數後加上/lib/libdl.so.2即可,在libfetion中,應該修改Makefile文件,打開Makefile文件,找到
LIBS = $(SUBLIBS) -lcurl -lssl ./libfetion/lib/libfetion_32.a -lQtXmlPatterns -lQtXml -lQtGui -lQtCore -lpthread一行,在其後面加上/lib/libdl.so.2或-ldl即可,如下
LIBS = $(SUBLIBS) -lcurl -lssl ./libfetion/lib/libfetion_32.a -lQtXmlPatterns -lQtXml -lQtGui -lQtCore -lpthread -ldl
或者
LIBS = $(SUBLIBS) -lcurl -lssl ./libfetion/lib/libfetion_32.a -lQtXmlPatterns -lQtXml -lQtGui -lQtCore -lpthread /lib/libdl.so.2

然後繼續執行第四步,make成功,./install.sh成功,www.linuxidc.com最終在程序菜單中見到libfetion的圖標,打開程序,輸入手機號和密碼,登錄成功!
Copyright © Linux教程網 All Rights Reserved