• 9781阅读
  • 1回复

CodeBlocks中如何使用Qt静态库 [复制链接]

上一主题 下一主题
离线ceavin
 
只看楼主 倒序阅读 楼主  发表于: 2010-02-08
用MinGW 3.4.5 编译出4.3.5 opensource版静态lib,codeblocks 8.02中建立一个默认的qt工程,把默认的链接库QtCore4和QtGui4分别更名为QtCore和QtGui(之前编译生成的静态库的命名都不带'4',而动态的版本却是带有的?!),但是链接时报了一大堆错误:

obj\Release\main.o:main.cpp|| undefined reference to `_imp___ZN12QApplicationC1ERiPPci'|
obj\Release\main.o:main.cpp|| undefined reference to `_imp___ZN7QString16fromAscii_helperEPKci'|
obj\Release\main.o:main.cpp|| undefined reference to `_imp___ZN11QPushButtonC1ERK7QStringP7QWidget'|
obj\Release\main.o:main.cpp|| undefined reference to `_imp___ZN7QWidget6resizeERK5QSize'|
obj\Release\main.o:main.cpp|| undefined reference to `_imp___ZN5QFontC1ERK7QStringiib'|
obj\Release\main.o:main.cpp|| undefined reference to `_imp___ZN7QWidget7setFontERK5QFont'|
obj\Release\main.o:main.cpp|| undefined reference to `_imp___ZN5QFontD1Ev'|
obj\Release\main.o:main.cpp|| undefined reference to `_imp___ZN7QObject7connectEPKS_PKcS1_S3_N2Qt14ConnectionTypeE'|
obj\Release\main.o:main.cpp|| undefined reference to `_imp___ZN12QApplication4execEv'|
obj\Release\main.o:main.cpp|| undefined reference to `_imp___ZN11QPushButtonD1Ev'|
obj\Release\main.o:main.cpp|| undefined reference to `_imp___ZN12QApplicationD1Ev'|
obj\Release\main.o:main.cpp|| undefined reference to `_imp___ZN7QString4freeEPNS_4DataE'|
obj\Release\main.o:main.cpp|| undefined reference to `_imp___ZN7QString4freeEPNS_4DataE'|
obj\Release\main.o:main.cpp|| undefined reference to `_imp___ZN12QApplicationD1Ev'|
obj\Release\main.o:main.cpp|| undefined reference to `_imp___ZN11QPushButtonD1Ev'|
obj\Release\main.o:main.cpp|| undefined reference to `_imp___ZN5QFontD1Ev'|
obj\Release\main.o:main.cpp:(.text$_ZN7QStringD1Ev[__ZN7QStringD1Ev]+0x26)||undefined reference to `_imp___ZN7QString4freeEPNS_4DataE'|
||=== Build finished: 17 errors, 0 warnings ===|


用objdump工具查看生成的obj,发现里面的符号都是 “__imp___ZN12QApplicationC1ERiPPci”这样的形式,但是我编译出来的静态库中的符号却是 “___ZN12QApplicationC1ERiPPci” 的形式,而qt官方提供的动态lib中的符号也和obj文件一样是增加了 "__imp__" 前缀的形式,所以链接到自己编译的静态lib中就会出现找不到符号的问题。 http://www.qtcn.org/bbs/read.php?tid=17721 一文中也提到了这个问题,但是我使用suntongo 提出的修改LFLAGS方法并不管用,生成的obj文件依然采用了第二种形式的符号,这个问题困扰很久了,有人知道怎么解决么?

PS: VC编译出的Qt静态库就没有这个问题,而在codeblocks中使用vlc官方提供的静态qt库(ftp://ftp.videolan.org/pub/videolan/vlc/0.8.5/contrib)时也还是会报找不到符号的错误
离线smileforu
只看该作者 1楼 发表于: 2011-05-27
Re:
路过 顶一下......
快速回复
限100 字节
 
上一个 下一个