0

我正在尝试使用 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. 

我正在遵循官方指示。但是,我收到编译错误:

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 时出错。所以...有人知道我该如何解决吗?

4

2 回答 2

1

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

struct Q_GUI_EXPORT FileInfo

struct MARBLE_EXPORT FileInfo

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

于 2016-01-14T23:12:10.727 回答
0

感谢@user5792278的回答,问题的链接错误可以解决。但是,您可能会遇到其他链接错误(关于libz)。就我而言,这是版本Application/15.12++ Qt5.5GCC4.9.2

CMakeFiles\marblewidget-qt5.dir/objects.a(MarbleZip.cpp.obj):MarbleZip.cpp:(.text+[...]): undefined reference to inflateInit2_ [...]

解决此问题的快速(尽管不一定干净)的方法是替换该行

TARGET_LINK_LIBRARIES (${MARBLEWIDGET} astro)

TARGET_LINK_LIBRARIES (${MARBLEWIDGET} astro z)

在文件中sources\src\lib\marble\CMakeLists.txt

于 2016-04-07T10:43:12.897 回答