可以使用CMake而不是qmake链接到dll

时间:2013-10-29 07:43:22

标签: c++ qt dll cmake qmake

我想在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构建项目?

0 个答案:

没有答案