c++ - 大理石 window 汇编

标签 c++ qt cmake mingw32 marble

我正在尝试使用 Mingw 和 Qt 5.5 在 Windows 10 上编译 Marble。

g++ (i686-posix-dwarf-rev1, Built by MinGW-W64 project) 4.9.2
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

我正在关注官方instruction .但是,我遇到了编译错误:

F:\marble\marble\src\lib\marble\MarbleZip.cpp:371:1: warning: 'Marble::MarbleZipReader::FileInfo::FileInfo()' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes]
 MarbleZipReader::FileInfo::FileInfo()
 ^
F:\marble\marble\src\lib\marble\MarbleZip.cpp:376:1: warning: 'Marble::MarbleZipReader::FileInfo::~FileInfo()' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes]
 MarbleZipReader::FileInfo::~FileInfo()
 ^
F:\marble\marble\src\lib\marble\MarbleZip.cpp:380:1: warning: 'Marble::MarbleZipReader::FileInfo::FileInfo(const Marble::MarbleZipReader::FileInfo&)' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes]
 MarbleZipReader::FileInfo::FileInfo(const FileInfo &other)
 ^
F:\marble\marble\src\lib\marble\MarbleZip.cpp:385:28: warning: 'Marble::MarbleZipReader::FileInfo& Marble::MarbleZipReader::FileInfo::operator=(const Marble::MarbleZipReader::FileInfo&)' redeclared without dllimport attribute after being referenced with dll linkage
 MarbleZipReader::FileInfo& MarbleZipReader::FileInfo::operator=(const FileInfo &other)
                            ^
F:\marble\marble\src\lib\marble\MarbleZip.cpp:398:6: warning: 'bool Marble::MarbleZipReader::FileInfo::isValid() const' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes]
 bool MarbleZipReader::FileInfo::isValid() const
      ^
[ 46%] Building CXX object src/lib/marble/CMakeFiles/marblewidget-qt5.dir/cloudsync/CloudSyncManager.cpp.obj
[ 47%] Building CXX object src/lib/marble/CMakeFiles/marblewidget-qt5.dir/cloudsync/RouteSyncManager.cpp.obj
[ 47%] Building CXX object src/lib/marble/CMakeFiles/marblewidget-qt5.dir/cloudsync/OwncloudSyncBackend.cpp.obj
[ 47%] Building CXX object src/lib/marble/CMakeFiles/marblewidget-qt5.dir/cloudsync/CloudRouteModel.cpp.obj
[ 47%] Building CXX object src/lib/marble/CMakeFiles/marblewidget-qt5.dir/cloudsync/CloudRoutesDialog.cpp.obj
[ 47%] Building CXX object src/lib/marble/CMakeFiles/marblewidget-qt5.dir/cloudsync/RouteItem.cpp.obj
[ 47%] Building CXX object src/lib/marble/CMakeFiles/marblewidget-qt5.dir/cloudsync/RouteItemDelegate.cpp.obj
[ 47%] Building CXX object src/lib/marble/CMakeFiles/marblewidget-qt5.dir/cloudsync/BookmarkSyncManager.cpp.obj
[ 47%] Building CXX object src/lib/marble/CMakeFiles/marblewidget-qt5.dir/cloudsync/MergeItem.cpp.obj
[ 47%] Building CXX object src/lib/marble/CMakeFiles/marblewidget-qt5.dir/cloudsync/ConflictDialog.cpp.obj
[ 47%] Building CXX object src/lib/marble/CMakeFiles/marblewidget-qt5.dir/MarbleWebView.cpp.obj
[ 47%] Building CXX object src/lib/marble/CMakeFiles/marblewidget-qt5.dir/TinyWebBrowser.cpp.obj
[ 47%] Building CXX object src/lib/marble/CMakeFiles/marblewidget-qt5.dir/MarbleDBusInterface.cpp.obj
[ 47%] Building CXX object src/lib/marble/CMakeFiles/marblewidget-qt5.dir/qrc_libmarble.cpp.obj
[ 47%] Building CXX object src/lib/marble/CMakeFiles/marblewidget-qt5.dir/qrc_marble.cpp.obj
[ 47%] Building CXX object src/lib/marble/CMakeFiles/marblewidget-qt5.dir/marblewidget-qt5_automoc.cpp.obj
[ 48%] Linking CXX shared library libmarblewidget-qt5.dll
CMakeFiles\marblewidget-qt5.dir/objects.a(NewstuffModel.cpp.obj):NewstuffModel.cpp:(.text+0x8a42): undefined reference to `_imp___ZN6Marble15MarbleZipReader8FileInfoD1Ev'
CMakeFiles\marblewidget-qt5.dir/objects.a(NewstuffModel.cpp.obj):NewstuffModel.cpp:(.text+0x8aaf): undefined reference to `_imp___ZN6Marble15MarbleZipReader8FileInfoD1Ev'
F:/Qt/Tools/mingw492_32/bin/../lib/gcc/i686-w64-mingw32/4.9.2/../../../../i686-w64-mingw32/bin/ld.exe: CMakeFiles\marblewidget-qt5.dir/objects.a(NewstuffModel.cpp.obj): bad reloc address 0x4 in section `.data'
collect2.exe: error: ld returned 1 exit status
src\lib\marble\CMakeFiles\marblewidget-qt5.dir\build.make:17541: recipe for target 'src/lib/marble/libmarblewidget-qt5.dll' failed
mingw32-make[2]: *** [src/lib/marble/libmarblewidget-qt5.dll] Error 1
CMakeFiles\Makefile2:1254: recipe for target 'src/lib/marble/CMakeFiles/marblewidget-qt5.dir/all' failed
mingw32-make[1]: *** [src/lib/marble/CMakeFiles/marblewidget-qt5.dir/all] Error 2
makefile:159: recipe for target 'all' failed
mingw32-make: *** [all] Error 2

看起来 zlib 有一些问题,我试图通过 CMake GUI 指定 zlib 的路径(我自己用 Mingw 手动编译),但结果是一样的 - 链接 libmarblewidget-qt5.dll 时出错。所以...有人知道我该如何解决吗?

最佳答案

在文件“MarbleZipReader.h”中,更改

struct Q_GUI_EXPORT FileInfo

struct MARBLE_EXPORT FileInfo

这对我有用,但不确定它是否完全正确。我认为这将在某个阶段进行修补。我正在使用 Marble 分支“Application/15.12”。

关于c++ - 大理石 window 汇编,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34251159/

相关文章:

c++ - 如何在不使用 GLSL、FSAA 或 GL_LINE_SMOOTH 的情况下绘制流畅的线条?

qt - QMainWindow 中的 VTK 小部件在鼠标移动之前不会呈现

c++ - 我的交集检查算法有什么问题?

c++ - CLion 无法识别 SDL2_image

c++ - 如何为 Win32 构建谷歌的 C++ libphonenumber 库

c++ - 用于拖动分隔符的鼠标光标的 Win32 资源在哪里?

c++ - 如何将方法指针作为模板参数传递

java - 如何在 Qt for android 中保持屏幕打开?

c++ - QT .png 文件未显示在屏幕上

c++ - Xcode 生成的存档文件缺少 dylib