我正试图在Windows 10上编译Marble,使用Mingw和QT5.5。
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图形用户界面指定zlib的路径(由我自己用明图手工编译),但是结果是在链接libmarblewidget-qt5.dll时出现了相同的错误。所以..。有人知道我该怎么修吗?
发布于 2016-01-14 23:12:10
在"MarbleZipReader.h“文件中,更改
struct Q_GUI_EXPORT FileInfo至
struct MARBLE_EXPORT FileInfo这对我有效,但不确定它是否完全正确。我想这会在某个阶段被修补。我在使用大理石支行“应用程序/15.12”。
发布于 2016-04-07 10:43:12
由于@user5792278的回答,这个问题的链接错误可以被解决。但是,您可能会遇到其他链接错误(涉及libz)。在我的例子中,这是Application/15.12 + Qt5.5 + GCC4.9.2的版本
CMakeFiles\marblewidget-qt5.dir/objects.a(MarbleZip.cpp.obj):MarbleZip.cpp:(.text+...):未定义引用inflateInit2_ ..。
要解决这个问题,一个快速的(虽然不一定是干净的)攻击,就是替换行。
TARGET_LINK_LIBRARIES (${MARBLEWIDGET} astro)使用
TARGET_LINK_LIBRARIES (${MARBLEWIDGET} astro z)在文件sources\src\lib\marble\CMakeLists.txt中
https://stackoverflow.com/questions/34251159
复制相似问题