编译QT程序时出现未定义的引用错误

问题描述:

我刚刚在我的redhat企业版linux 5.6上安装了QtSDK 1.2。在编译QT程序时,我得到以下错误:编译QT程序时出现未定义的引用错误

[[email protected] example1]# make 
g++ -m64 -Wl,-O1 -Wl,-rpath,/opt/QtSDK/Desktop/Qt/4.8.0/gcc/lib -o example1 fac1.o -L/opt/QtSDK/Desktop/Qt/4.8.0/gcc/lib -lQtGui -lQtCore -lpthread 
/opt/QtSDK/Desktop/Qt/4.8.0/gcc/lib/libQtCore.so: undefined reference to `g_main_context_push_thread_default' 
/opt/QtSDK/Desktop/Qt/4.8.0/gcc/lib/libQtCore.so: undefined reference to `[email protected]_2.9' 
/opt/QtSDK/Desktop/Qt/4.8.0/gcc/lib/libQtGui.so: undefined reference to `[email protected]_2.9' 
/opt/QtSDK/Desktop/Qt/4.8.0/gcc/lib/libQtCore.so: undefined reference to `g_main_context_pop_thread_default' 
/opt/QtSDK/Desktop/Qt/4.8.0/gcc/lib/libQtGui.so: undefined reference to `FcFreeTypeQueryFace' 
/opt/QtSDK/Desktop/Qt/4.8.0/gcc/lib/libQtGui.so: undefined reference to `FT_Library_SetLcdFilter' 
/opt/QtSDK/Desktop/Qt/4.8.0/gcc/lib/libQtGui.so: undefined reference to `[email protected]_2.11' 
collect2: ld returned 1 exit status 
make: *** [example1] Error 1 
[[email protected] example1]# 

看来g ++编译器使用了所有正确的选项。 Befor在rhel 5.6上安装了QtSDK 1.2,我将libstdC++。so.6.0.10复制到/ usr/lib64,并将libstdC++。so.6重新链接到libstdC++。so.6.0.10,因为QtSDK需要libstdC++中的GLIBCXX_3.4.9符号图书馆。我认为这可能是问题的根源。但我不确定这一点。那么有什么建议?提前致谢。

我的回答是多个问题:

  • 您在64位架构?如果不是为什么使用64个库?
  • 库复制是64版本吗?
    • 如果是的话,为什么你需要复制它们,应该已经有标准库中/usr/lib64
    • 如果不是错误是合法的情况。
  • 你是怎么编译Qt的?如果你的Qt库真的是64位的,那么这意味着环境设置已经是正确的了。
+0

是的,它是在64架构上。最初,rhel 5.6使用libstdC++ - 4.1.2-50.el5,但QtSDK需要GLIBCXX_3.4.8,它不包含在libstdC++ - 4.1.2中,所以我从rpm.pbone下载了libstdC++ - 4.3.2-7.x86_64.rpm .net并将libstdC++。so.6.0.10解压缩到/ usr/libc64。我没有从源代码编译Qt。我应该这样做吗? – Michael 2012-02-15 09:51:28

+0

你在安装Qt之前是否更改了库? – UmNyobe 2012-02-15 10:07:39

+0

是的。除非我将/usr/lib64/libstdc++.so.6重新链接到新复制的libstdC++。so.6.0.10,否则QtSDK安装将无法继续。 – Michael 2012-02-15 11:23:03