0

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 を使用してプロジェクトをビルドするにはどうすればよいですか?

4

0 に答える 0