编译器:GCC编译器可以用来编译C和C++源程序,C编译器通过文件的后缀来判断是C程序还是C++程序。一般来说C源文件的后缀为“.C”,而C++源文件的后缀为“.C”或“C++”。
但GCC编译器只能编译C++源程序,不能与使用的库连接,因此用G++来完成C++程序的编译与连接,该程序会自动调用GCC来编译。
Linux里环境变量的设置,有如下几种方法:(1)直接在终端里输入export 后面加要设的变量,例如QT:
Export QTDIR=$PWD/qt-2.3.2
其中,pwd是用来显当前路径的命令,在其前面加上$,则表示QT的目标目录在当前目录下的“qt-2.3.2”里,当然“$PWD”也可以用绝对路径来代替。这种方法所设的环境变量在下次开机后不再有效,而且换个shell也不会有效,只是临时的。
(2)在etc/profile里添加环境变量,比如:
export QTDIR=/usr
export LD_LIBRARY_PATH=$QTDIR/lib
export QT_QWS_FONTDIR=$QTDIR/lib/fonts
export QWS_DISPLAY="LinuxFb:/dev/fb0"
(3)修改.bashrc, 如果需要给某个用户权限使用这些环境变量,只需修改其个人用户家目录下的.bashrc文件就可以了。
(4)用以上面两种方法设置好环境变量后记得重启
以上使用QT为例
[wanglj@localhost testQT]$ makeg++ -o testQT main.o-L/opt/Qt5.1.1/5.1.1/gcc_64/lib -lqt-mt -lXext -lX11 -lm
main.o: In function `main':
/home/wanglj/testQT/main.cpp:6: undefined reference to `QApplication::QApplication(int&, char**, int)'
main.o: In function `QString':
/usr/include/QtCore/qstring.h:413: undefined reference to `QString::fromAscii_helper(char const*, int)'
main.o: In function `main':
/home/wanglj/testQT/main.cpp:7: undefined reference to `QLabel::QLabel(QString const&, QWidget*, QFlags<Qt::WindowType>)'
main.o: In function `~QString':
/usr/include/QtCore/qstring.h:869: undefined reference to `QString::free(QString::Data*)'
/usr/include/QtCore/qstring.h:869: undefined reference to `QString::free(QString::Data*)'
collect2: ld 返回 1
make: *** [testQT] 错误 1
但若直接用 qtcreator 打开编译,则无错误
并且find -name libqt-mt* 也找不到其他版本的该文件
用qtcreator编译好的可执行文件,也找不到连接该lib文件
[wanglj@localhost build-testQT-桌面-Debug]$ ldd testQT
linux-vdso.so.1 => (0x00007fff4ddff000)
libQtGui.so.4 =>/usr/lib64/libQtGui.so.4 (0x000000397f000000)
libQtCore.so.4 =>/usr/lib64/libQtCore.so.4 (0x000000397ea00000)
libpthread.so.0 =>/lib64/libpthread.so.0 (0x0000003978600000)
libstdc++.so.6 =>/usr/lib64/libstdc++.so.6 (0x00007fda6a081000)
libm.so.6 =>/lib64/libm.so.6 (0x0000003977a00000)
libgcc_s.so.1 =>/lib64/libgcc_s.so.1 (0x0000003983a00000)
libc.so.6 =>/lib64/libc.so.6 (0x0000003977e00000)
libgthread-2.0.so.0 =>/lib64/libgthread-2.0.so.0 (0x000000397a600000)
librt.so.1 =>/lib64/librt.so.1 (0x0000003978e00000)
libglib-2.0.so.0 =>/lib64/libglib-2.0.so.0 (0x0000003979200000)
libpng12.so.0 =>/usr/lib64/libpng12.so.0 (0x000000397be00000)
libz.so.1 =>/lib64/libz.so.1 (0x0000003978a00000)
libfreetype.so.6 =>/usr/lib64/libfreetype.so.6 (0x000000397ba00000)
libgobject-2.0.so.0 =>/lib64/libgobject-2.0.so.0 (0x0000003979e00000)
libSM.so.6 =>/usr/lib64/libSM.so.6 (0x0000003985a00000)
libICE.so.6 =>/usr/lib64/libICE.so.6 (0x0000003984e00000)
libXi.so.6 =>/usr/lib64/libXi.so.6 (0x000000397ce00000)
libXrender.so.1 =>/usr/lib64/libXrender.so.1 (0x000000397d600000)
libXrandr.so.2 =>/usr/lib64/libXrandr.so.2 (0x000000397de00000)
libXfixes.so.3 =>/usr/lib64/libXfixes.so.3 (0x000000397da00000)
libXcursor.so.1 =>/usr/lib64/libXcursor.so.1 (0x000000397e200000)
libXinerama.so.1 =>/usr/lib64/libXinerama.so.1 (0x000000397e600000)
libfontconfig.so.1 =>/usr/lib64/libfontconfig.so.1 (0x000000397d200000)
libXext.so.6 =>/usr/lib64/libXext.so.6 (0x000000397c600000)
libX11.so.6 =>/usr/lib64/libX11.so.6 (0x000000397b600000)
libdl.so.2 =>/lib64/libdl.so.2 (0x0000003978200000)
/lib64/ld-linux-x86-64.so.2 (0x0000003977600000)
libuuid.so.1 =>/lib64/libuuid.so.1 (0x0000003983600000)
libexpat.so.1 =>/lib64/libexpat.so.1 (0x000000397c200000)
libxcb.so.1 =>/usr/lib64/libxcb.so.1 (0x000000397ae00000)
libXau.so.6 =>/usr/lib64/libXau.so.6 (0x000000397aa00000)
------解决方案--------------------
INCPATH = -I/usr/lib64/qt-3.3/mkspecs/default -I. -I. -I$(QTDIR)/include
这一行看上去你调用的qmake不是5.1.1的。试试指定完整路径运行qmake
/opt/Qt5.1.1/5.1.1/gcc_64/bin/qmake testQT.pro
环境:ubuntu16.04桌面环境。
说明:使用ubuntu16.04桌面环境,安装QtCreator之后,再利用QtCreator开发QT5 GUI程序,如果编译的程序要运行在arm linux嵌入式系统中,则必须配置交叉编译工具链。
主要配置内容:调试器、编译器、QT版本。
1、打开工具,点击选项。
2、选择选项中的构建与运行,概要界面。
3、构建套件(kit)界面。
4、Qt Versions界面。
5、编译器界面。
6、Debuggers界面。
7、Qbs界面。
8、交叉编译例子:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)