1 つの main.cpp ファイルと dll で構成される、Windows 上の単純な Qt プロジェクトを構築したいと考えています。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"
}
この場合、ビルドは失敗し、my_dll.dll の関数である のundefined reference to 'my_function@8'
ようなリンカー エラーが発生します。my_function
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 を使用してプロジェクトをビルドするにはどうすればよいですか?