0

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

4

0 回答 0