首页| 论坛| 消息

标题:mingw编译问题,好多年一直存在?
作者:adonais
日期:2020-04-16 14:45
内容:

使用mingw编译qt5的时候,有几个multiple definition错误存在, 记得好几年前就是这样。
看看源文件,是这样的结构。
xxx.cpp 源码里包含 #include "yyy.cpp"
然后pri配置文件同时包括xxx.cpp,yyy.cpp ,那么链接器会链接xxx.o,yyy.o,
很明显xxx.o已经包含了yyy.o里面的函数,同时链接的时候就会报multiple definition.
我就很奇怪,难道官方一直使用--allow-multiple-definition参数,而没有去改动一下配置文件.
按理说vc链接的时候也会遇到多重定义的问题,但link好像没有提示.


#1 [hitler++ 04-17 00:20]
cpp文件include其他cpp,非常不标准的用法,很少人这样用,有问题估计也懒得修复了
#2 [fsu0413 04-17 12:07]
没见过这样的操作。
你说的具体是哪个文件?我有空可以去看看。
顺便这种定义应该是不会在pri里加yyy.cpp的吧。。。。
#3 回 fsu0413 的帖子 [adonais 04-18 21:58]
fsu0413:没见过这样的操作。
你说的具体是哪个文件?我有空可以去看看。
顺便这种定义应该是不会在pri里加yyy.cpp的吧。。。。 (2020-04-17 12:07)
下面是qt5.12.8中的部分,其他版本应该也差不多是这样
qtbase\src\corelib\thread\thread.pri如下

SOURCES += \
thread/qmutex.cpp \
...
win32 {
SOURCES += \
thread/qmutex_win.cpp \
thread/qwaitcondition_win.cpp
} else {
...
qtbase\src\corelib\thread\qmutex.cpp如下:
#ifdef QT_LINUX_FUTEX
#include "qmutex_linux.cpp"
#elif defined(Q_OS_MAC)
#include "qmutex_mac.cpp"
#elif defined(Q_OS_WIN)
#include "qmutex_win.cpp"
#else
#include "qmutex_unix.cpp"
#endif
...
很奇怪msvc编译的时候没有报错,mingw编译的时候出现multiple definition错误。
不知是不是mingw编译的时候我禁用了预编译头的原因?
#4 [圣域天子 04-20 12:18]
明显是你自己多包含 了, win32 中的 qmutex_win.cpp 不应该加的
#5 [fsu0413 04-20 22:45]
看了下生成的makefile里没有qmutex_win.cpp的编译,不知道原理
推测可能是qmake耦合了这块地方,但是我没有去调查,楼主如果感兴趣的话可以调查一下

<< 1 2 >> (1/2)

回复 发表
主题 版块