1)使用make命令編譯Qt原碼時出現了 /usr/bin/ld: cannot find -lXrender 問題:html
/usr/bin/ld: cannot find -lXrender
collect2: ld 返回 1
make[1]: *** [../../../../lib/libQtWebKit.so.4.7.4] 錯誤 1
make[1]:正在離開目錄 `/home/Qt/qt-everywhere-opensource-src-4.7.4/src/3rdparty/webkit/WebCore'
make: *** [sub-webkit-make_default-ordered] 錯誤 2python
其解決方法以下:linux
執行sudo apt-get install libXrender-dev命令,安裝相應的lib文件。web
因此最好在編譯Qt原碼前先執行如下命令:sql
sudo apt-get install libglib2.0-dev libSM-dev libxrender-dev libfontconfig1-dev libxext-devubuntu
sudo apt-get install libglui-dev小程序
安裝相應的lib文件,防止編譯出錯。緩存
再上網搜索一下,發如今Linux下編譯應用程序經常會出現以下錯誤:
/usr/bin/ld:cannot find -lxxx
意思是編譯過程找不到對應庫文件。其中-lxxx表示連接庫文件libxxx.so。架構
通常出現這種錯誤有如下幾種緣由:
1.系統缺少對應的庫文件
2.庫文件版本不對應
3.庫文件連接錯誤
4.庫文件路徑設置不正確app
對於前2種狀況,能夠經過下載安裝lib來解決:
sudo apt-get install libxxx-dev(上面編譯Qt的狀況大可能是這樣)
而對於第3種狀況,經過find或者locate命令定位到連接文件,查看連接文件是否正確的指向了lib文件。若是不是,用 ln -sf */libxxx.so.x */libxxx.so 命令修改。
對於最後一種狀況,能夠到/etc/ld.so.conf.d目錄下,修改其中任意一份conf文件(也可自建conf),將lib所在的目錄寫進去,而後在終端輸入ldconfig更新緩存。
2) 如下博客來自
去年春天我用Qt3寫了一個小軟件,感受Linux下用Qt做界面程序很方便,和Windows下的VC差很少. 因此上次ubuntu 7.10系統一安裝好就將Qt3開發包安裝上去。這兒順便把之前安裝Qt3軟件包貼出來。
#sudo apt-get install qt3-dev-tools qt3-examples Python-qt3 qt3-designer qt3-assistant
如今Qt 的版本已經到Qt-4.3.2了,最近打算用Qt4寫個小程序。網上找到安裝以下軟件包:
#sudo apt-get install qt4-dev-tools qt3-examples qt4-designer qt3-assistant python-qt4
這 裏面qt3-examples qt3-assistant,由於相應的qt4版本apt-get找不到,因此就安裝了之前的版本. 下面寫一個Qt4 的hello world, 來源於 C++ GUI Programming with Qt 4的第一個程序,以下:
#include
#include
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QLabel *label = new QLabel("Hello Qt!");
label->show();
return app.exec();
}
能夠發現這個簡單的hello world和Qt3就有一些變化了。
下面編譯程序:
#qmake -project
生成配置文件xxx.pro(其中xxx爲工程文件名)
#qmake
自動生成Makefile文件
#make
出現了下面的錯誤信息:
me.cpp:1:28: 錯誤: qt4/QApplication:No such file or directory
me.cpp:2:22: 錯誤: qt4/QLabel:No such file or directory
me.cpp: In function ‘int main(int, char**)’:
me.cpp:5: 錯誤: ‘QApplication’ 在此做用域中還沒有聲明
me.cpp:5: 錯誤: expected `;' before ‘app’
me.cpp:6: 錯誤: ‘QLabel’ 在此做用域中還沒有聲明
me.cpp:6: 錯誤: ‘label’ 在此做用域中還沒有聲明
me.cpp:6: 錯誤: expected type-specifier before ‘QLabel’
me.cpp:6: 錯誤: expected `;' before ‘QLabel’
me.cpp:8: 錯誤: ‘app’ 在此做用域中還沒有聲明
me.cpp: At global scope:
me.cpp:3: 警告: 未使用的參數 ‘argc’
me.cpp:3: 警告: 未使用的參數 ‘argv’
make: *** [me.o] 錯誤 1
打開Makefile文件, 發現裏面包含的Qt文件所有是和 Qt3有關的,使用qmake -v 命令發現果真qmake的版本是3,whereis找到qmake命令所在目錄/usr/bin/qmake
#ls -l qmake*
lrwxrwxrwx 1 root root 23 2008-01-18 20:53 /usr/bin/qmake -> /etc/alternatives/qmake
-rwxr-xr-x 1 root root 2052100 2007-10-31 01:29 /usr/bin/qmake-qt3
-rwxr-xr-x 1 root root 3378140 2007-11-06 07:56 /usr/bin/qmake-qt4
# ls -l /etc/alternatives/qmake
lrwxrwxrwx 1 root root 18 2008-01-18 20:56 /etc/alternatives/qmake -> /usr/bin/qmake-qt3
如今清楚了 qmake是個連接,經過alternatives/qmake指向qmake-qt3,如今想讓qmake默認爲qmake-qt4,只要重定向連接
#sudo rm /etc/alternatives/qmake
#sudo ln -s /usr/bin/qmake-qt4 /etc/alternatives/qmake
一樣,想要designer命令默認是版本4,只要
#sudo rm /etc/alternatives/designer
#sudo ln -s /usr/bin/designer-qt4 /etc/alternatives/designer
如今好了,再次qmake -project , qmake, make 上面的hello world文件,一切順利。
3)如下博客來自 http://www.cnitblog.com/zouzheng/archive/2010/07/06/67197.html
在交叉編譯過程當中,在./configure中加上相似-qt-mouse-*和-qt-kbd-*就會出現unknown argument錯誤。
./configure
-prefix /usr/local/qte-arm (強制安裝在此路徑)
-debug-and-release 編譯和連接兩個版本的Qt
-qt3support 支持QT3
-qt-zlib 捆綁使用的Qt的zlib。
-qt-libtiff 使用Qt的捆綁的libtiff。
-qt-libpng 使用Qt的捆綁的的libpng。
-qt-libmng 使用Qt的捆綁的libmng。
-qt-libjpeg 使用Qt的捆綁的的libjpeg。
-make libs 新增 libs
-nomake examples 排除 。。
-nomake demos 排除。。
-nomake docs 排除。。
-no-cups 不要編譯CUPS的支
-iconv 編譯iconv擁有支持(3)
-xplatform qws/linux-arm-g++
-embedded arm
-little-endian
-qt-freetype
-depths 8,16,24,32
-qt-gfx-linuxfb
-no-gfx-transformed
-no-gfx-qvfb
-no-gfx-vnc
-no-gfx-multiscreen
-no-dbus
-qt-sql-sqlite
-qt-kbd-qvfb
-qt-kbd-tty
-qt-mouse-pc
-no-glib
-plugin-mouse-tslib -I/usr/local/tslib/ -L/usr/local/tslib/lib -D__ARM_ARCH_5TEJ__
(包含路徑) (庫路徑) (定義的預處理器)
以mipsel爲架構的loongson1B開發板在交叉編譯QT4.5以上版本時的配置爲:
若是出錯:
/usr/local/arm/4.1.2/bin/../lib/gcc/arm-angstrom-linux-gnueabi/4.1.2/../../../../arm-angstrom-linux-gnueabi/bin/ld: warning: libts-0.0.so.0, needed by /home/stillwater/4.1.2/qt-everywhere-opensource-src-4.6.0/lib/libQtGui.so, not found (try using -rpath or -rpath-link)
/home/stillwater/4.1.2/qt-everywhere-opensource-src-4.6.0/lib/libQtGui.so: undefined reference to `ts_read_raw'
/home/stillwater/4.1.2/qt-everywhere-opensource-src-4.6.0/lib/libQtGui.so: undefined reference to `ts_open'
/home/stillwater/4.1.2/qt-everywhere-opensource-src-4.6.0/lib/libQtGui.so: undefined reference to `ts_fd'
/home/stillwater/4.1.2/qt-everywhere-opensource-src-4.6.0/lib/libQtGui.so: undefined reference to `ts_config'
/home/stillwater/4.1.2/qt-everywhere-opensource-src-4.6.0/lib/libQtGui.so: undefined reference to `ts_close'
/home/stillwater/4.1.2/qt-everywhere-opensource-src-4.6.0/lib/libQtGui.so: undefined reference to `ts_read'
collect2: ld returned 1 exit status
make[2]: *** [deform] Error 1
make[2]: Leaving directory `/home/stillwater/4.1.2/qt-everywhere-opensource-src-4.6.0/demos/deform'
make[1]: *** [sub-deform-make_default] Error 2
make[1]: Leaving directory `/home/stillwater/4.1.2/qt-everywhere-opensource-src-4.6.0/demos'
make: *** [sub-demos-make_default-ordered] Error 2
解決辦法:
修改qt-4.6.1/mkspecs/qws/linux-mips-g++/qmake.conf 文件(添加lts參數):
QMAKE_CC = mips-linux-gcc -lts
QMAKE_CXX = mips-linux-g++ -lts
QMAKE_LINK = mips-linux-g++ -lts
QMAKE_LINK_SHLIB = mips-linux-g++ -lts
#sudo make install
4)
mipsel-linux-g++ -Wl,-rpath-link,/opt/qt-everywhere-opensource-src-4.8.6/lib -fno-exceptions -Wl,-O1 -Wl,-rpath,/opt/qt-everywhere-opensource-src-4.8.6/src/3rdparty/webkit/Source/lib -Wl,-rpath,/opt/qt4-mipsel/lib -Wl,-rpath,/opt/qt4-mipsel/lib -o tst_qwebframe .obj/release-shared-emb-mips/tst_qwebframe.o .obj/release-shared-emb-mips/qrc_tst_qwebframe.o -L/TSLIB/lib -L/opt/qt-everywhere-opensource-src-4.8.6/lib -L/TSLIB/lib -L/opt/qt-everywhere-opensource-src-4.8.6/lib -lQtDeclarative -lQtScript -lQtSvg -lQtSql -lQtWebKit -lQtTest -lQtGui -lQtNetwork -lQtCore -lpthread /opt/gcc-4.3-ls232-softfloat/lib/gcc/mipsel-linux/4.3.0/../../../../mipsel-linux/bin/ld: warning: libts-0.0.so.0, needed by /opt/qt-everywhere-opensource-src-4.8.6/lib/libQtGui.so, not found (try using -rpath or -rpath-link)/opt/qt-everywhere-opensource-src-4.8.6/lib/libQtGui.so: undefined reference to `ts_read_raw'/opt/qt-everywhere-opensource-src-4.8.6/lib/libQtGui.so: undefined reference to `ts_open'/opt/qt-everywhere-opensource-src-4.8.6/lib/libQtGui.so: undefined reference to `ts_fd'/opt/qt-everywhere-opensource-src-4.8.6/lib/libQtGui.so: undefined reference to `ts_config'/opt/qt-everywhere-opensource-src-4.8.6/lib/libQtGui.so: undefined reference to `ts_close'/opt/qt-everywhere-opensource-src-4.8.6/lib/libQtGui.so: undefined reference to `ts_read'collect2: ld returned 1 exit statusMakefile.WebKit:109: recipe for target 'tst_qwebframe' failedmake[3]: *** [tst_qwebframe] Error 1make[3]: Leaving directory '/opt/qt-everywhere-opensource-src-4.8.6/src/3rdparty/webkit/Source/WebKit/qt/tests/qwebframe'Makefile.WebKit:51: recipe for target 'sub-qwebframe-make_default' failedmake[2]: *** [sub-qwebframe-make_default] Error 2make[2]: Leaving directory '/opt/qt-everywhere-opensource-src-4.8.6/src/3rdparty/webkit/Source/WebKit/qt/tests'Makefile.WebKit:187: recipe for target 'sub-WebKit-qt-tests-make_default-ordered' failedmake[1]: *** [sub-WebKit-qt-tests-make_default-ordered] Error 2make[1]: Leaving directory '/opt/qt-everywhere-opensource-src-4.8.6/src/3rdparty/webkit/Source'Makefile:562: recipe for target 'sub-webkit-make_default-ordered' failedmake: *** [sub-webkit-make_default-ordered] Error 2eb http://ppa.launchpad.net///deb.opera.com/opera-stable/ stable non-free/ubuntu maverick main解決辦法:修改qt-everywhere-opensource-src-4.6.0/mkspecs/qws/linux-mips-g++/qmake.conf 文件(添加lts參數):QMAKE_CC = mipsel-linux-gcc -ltsQMAKE_CXX = mipsel-linux-g++ -ltsQMAKE_LINK = mipsel-linux-g++ -ltsQMAKE_LINK_SHLIB = mipsel-linux-g++ -lts