• 9048阅读
  • 11回复

[提问][已解决]QtCreator2.5.0编译失败:multiple definition of `_Unwind_SjLj_XXXX' [复制链接]

上一主题 下一主题
离线roywillow
 

只看楼主 倒序阅读 楼主  发表于: 2012-05-15
想了许久,还是决定在这里问问这个注定会石沉大海的问题……
QtCreator2.5.0最近发布了,于是就尝试编译了一下,但是还是出问题了,似乎是与botan库相关的问题:
  1. e:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.5.4/libgcc_eh.a(unwind-sjlj.o): In function `_Unwind_SjLj_Register':
  2. /W64_4.5_180676-src/build-gcc/x86_64-w64-mingw32/libgcc/../../../gcc45-svn/libgcc/../gcc/unwind-sjlj.c:121: multiple definition of `_Unwind_SjLj_Register'
  3. E:/qtcreator-build/lib/qtcreator/libBotan.a(Botan.dll):(.text+0x0): first defined here
  4. e:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.5.4/libgcc_eh.a(unwind-sjlj.o): In function `_Unwind_SjLj_Unregister':
  5. /W64_4.5_180676-src/build-gcc/x86_64-w64-mingw32/libgcc/../../../gcc45-svn/libgcc/../gcc/unwind-sjlj.c:168: multiple definition of `_Unwind_SjLj_Unregister'
  6. E:/qtcreator-build/lib/qtcreator/libBotan.a(Botan.dll):(.text+0x0): first defined here
  7. e:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.5.4/libgcc_eh.a(unwind-sjlj.o): In function `_Unwind_SjLj_Resume':
  8. /W64_4.5_180676-src/build-gcc/x86_64-w64-mingw32/libgcc/../../../gcc45-svn/libgcc/../gcc/unwind.inc:220: multiple definition of `_Unwind_SjLj_Resume'
  9. E:/qtcreator-build/lib/qtcreator/libBotan.a(Botan.dll):(.text+0x0): first defined here
  10. collect2: ld returned 1 exit status
  11. mingw32-make.exe[4]: *** [..\..\..\lib\qtcreator\Utils.dll] Error 1
  12. mingw32-make.exe[3]: *** [release] Error 2
  13. mingw32-make.exe[2]: *** [sub-utils-make_default-ordered] Error 2
  14. mingw32-make.exe[1]: *** [sub-libs-make_default-ordered] Error 2
  15. mingw32-make.exe: *** [sub-src-make_default-ordered] Error 2


我用的编译器是MinGW-w64,Qt库是Qt4.8.1,为了编译Creator特地编译了一个带webkit带exception的动态库。
同样的编译器曾经成功编译过Qt4.8.0,也成功用这个库编译过QtCreator2.4.0
郁闷呐……
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线passion_wu
只看该作者 1楼 发表于: 2012-05-16
这种问题最好上google搜吧,我编译2.4出现的问题就是在google上解决的。
或者你按照提示,注释掉一个地方的定义啊。
没有石沉大海啊
离线jdwx

只看该作者 2楼 发表于: 2012-05-16
本人乃懒人一个,只用现成的,哈哈!
此问题,上CSDN去比较好。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线ppdayz

只看该作者 3楼 发表于: 2012-05-16
upup  不能沉
离线roywillow

只看该作者 4楼 发表于: 2012-05-16
回 1楼(passion_wu) 的帖子
google上直接搜这东西没见到啥能用得上的……
要说注释掉定义……那个提示根本就没指出在代码的哪个位置啊……
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线roywillow

只看该作者 5楼 发表于: 2012-05-16
回 2楼(jdwx) 的帖子
话说……CSDN的Qt论坛被归到了移动开发下……?
总感觉在那里问希望也不大呢……
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线jdwx

只看该作者 6楼 发表于: 2012-05-16
回 5楼(roywillow) 的帖子
确实Qt归到移动开发感觉别扭。其实Qt主要在GUI桌面开发。
CSDN的高人老邓估计能知道。
人家都已经有Qt精简版了。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线roywillow

只看该作者 7楼 发表于: 2012-05-16
回 6楼(jdwx) 的帖子
似乎是因为LFLAGS中有参数-static-libgcc的原因,去掉后好像就通过这一部分了,目前还在编译,希望不要逼我再去掉另外一个-static-libstdc++参数……
不过我的Qt库是带这个参数编译的,不会有问题吧……
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线roywillow

只看该作者 8楼 发表于: 2012-05-16
回 6楼(jdwx) 的帖子
去掉static libgcc后还真编译通过了,但是问题是……为啥是英文的界面,明明翻译文件已经在那好好呆着了……
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线roywillow

只看该作者 9楼 发表于: 2012-05-16
好吧,最后英文界面的问题也大概解决了,我想应该是Qt库的一个“bug”
源码真是个好东西XD:
  1. // uiLanguages crashes on Windows with 4.8.0 release builds
  2. #if (QT_VERSION >= 0x040801) || (QT_VERSION >= 0x040800 && !defined(Q_OS_WIN))
  3.     uiLanguages = QLocale::system().uiLanguages();
  4. #else
  5.     uiLanguages << QLocale::system().name();
  6. #endif

不知道为啥非要使用Qt4.8.0之后引入的uiLanguages()函数,我使用的4.8.1会调用这个函数来获得一个QStringList,然后尝试将这个list的第一个作为qm文件名的后缀
但是实际上当我用qDebug输出这个list以及作为对照的name()的时候,得到的结果是:
("zh-CN", "en-US")
"zh_CN"
下划线与减号的差别啊亲!
于是将creator和qt的翻译文件分别复制一份为“qtcreator_zh-CN.qm”和"qt_zh-CN.qm"放到原来的文件夹中,就解决了……

但是我还是想知道能不能不去掉-static-libgcc这个参数进行编译OTL
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线roywillow

只看该作者 10楼 发表于: 2012-05-17
好吧,带-static-libgcc参数也成功编译出来了,并且顺带让那个botan库静态编译了
方法就是给botan的pro文件(记得是叫src.pro)中添加这么一句:CONFIG += static staticlib
这样就强制覆盖了qtcreatorlibrary.pri中的CONFIG += shared dll这句,然后就静态连接进去了
之后编译还会出现一个重复定义,注释掉某s60XXX.cpp中的这个重复定义就好了(看代码确实是一样的……)
同时顺便把翻译文件加载问题的那一行也直接去掉了,即强制使用QLocale::system().name()

与大家分享一下


专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线nlstone

只看该作者 11楼 发表于: 2012-05-22
强贴,留名,顶!
无我不能之事
无我不解之谜
无我不为之利
无我不胜之争
快速回复
限100 字节
 
上一个 下一个