我想在Windows上构建一个简单的Qt项目,它包含一个main.cpp文件和一个dll。 使用CMake构建它没有任何问题:
project(app)
cmake_minimum_required(VERSION 2.6.0)
find_package(Qt4 REQUIRED QtCore QtGui QtXml)
...
add_executable(app main.cpp)
target_link_libraries(app ${QT_LIBRARIES} my_dll.dll)
然后我尝试使用qmake构建它:
...
SOURCES += main.cpp
win32:{
LIBS += -L"my_dll.dll"
}
在这种情况下,构建失败,我收到undefined reference to 'my_function@8'
之类的链接器错误,其中my_function
是my_dll.dll中的一个函数。
当我使用Dependency Walker打开my_dll.dll时,我可以看到所有函数名都没有被修饰。我不知道为什么qmake会尝试用'@ 8'来解析函数名。
这就是CMake写入链接日志的内容:
C:\MinGW\bin\g++.exe -g -Wl,--whole-archive CMakeFiles\app.dir/objects.a -Wl,--no-whole-archive -o app.exe -Wl,--out-implib,libapp.dll.a -Wl,--major-image-version,0,--minor-image-version,0 C:\QT\2010.02.1\qt\lib\libQtGuid4.a C:\QT\2010.02.1\qt\lib\libQtXmld4.a C:\QT\2010.02.1\qt\lib\libQtCored4.a -l,my_dll -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32
它还提供了一些警告:
Warning: resolving _my_fucntion@8 by linking to _my_function
Use --enable-stdcall-fixup to disable these warnings
Use --disable-stdcall-fixup to disable these fixups
这就是qmake所说的:
g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -mthreads -Wl -o debug/aap1.exe debug/main.o -L'c:/Qt/2010.02.1/qt/lib' -lmingw32 -lqtmaind -Lmy_dll.dll -lQtXmld4 -lQtGuid4 -lQtCored4
如何使用qmake构建项目?