This forum has been archived. All content is frozen. Please use KDE Discuss instead.

Marble build - Linker error -unresolved external

Tags: None
(comma "," separated)
Radioguy00
Registered Member
Posts
2
Karma
0
OS
I am trying to build the latest version ( it is in fact the first time I ever build it) of Marble on windows XP. Qt version is the latest.

The cmake flag used are -DQTONLY=ON -DCMAKE_BUILD_TYPE=RELEASE

Everything goes smoothly until 99% is done.

At this point during the linking of TestGeoSceneWriter the following linker error occurs:(see at end of post)
These errors are unresolved external which are functions of the classes GeoSceneTexture, GeoSceneVector, GeoSceneSection and GeoSceneItem.

Any idea to resolve the issue. Thanks. Thierry

"C:\Program Files\CMake 2.8\bin\cmake.exe" -E remove -f CMakeFiles\TestGeoSceneW
riter.dir/objects.a

C:\Qt\2010.05\mingw\bin\ar.exe cr CMakeFiles\TestGeoSceneWriter.dir/objects.a @C
MakeFiles\TestGeoSceneWriter.dir\objects1.rsp


C:\Qt\2010.05\mingw\bin\g++.exe
-O3
-DNDEBUG
-Wl,--whole-archive CMakeFiles\TestGeoSceneWriter.dir/objects.a
-Wl,--no-whole-archive
-o TestGeoSceneWriter.exe
-Wl,--out-implib,libTestGeoSceneWriter.dll.a
-Wl,--major-image-version,0,--minor-image-version,0
-LC:\Qt\2010.05\qt\lib
-LM:\_Exchange\Qt\Marble-Build\src\lib
C:\Qt\2010.05\qt\lib\libqtmain.a
C:\Qt\2010.05\qt\lib\libQtCore4.a
C:\Qt\2010.05\qt\lib\libQtGui4.a
C:\Qt\2010.05\qt\lib\libQtTest4.a
..\src\lib\libmarblewidget.dll.a
C:\Qt\2010.05\qt\lib\libQtCore4.a
C:\Qt\2010.05\qt\lib\libQtGui4.a
C:\Qt\2010.05\qt\lib\libQtXml4.a
C:\Qt\2010.05\qt\lib\libQtSvg4.a
C:\Qt\2010.05\qt\lib\libQtNetwork4.a
C:\Qt\2010.05\qt\lib\libQtScript4.a
C:\Qt\2010.05\qt\lib\libqtmain.a
C:\Qt\2010.05\qt\lib\libQtWebKit4.a
-lws2_32 -limm32 -lwinmm -lkernel32 (add library file)
-luser32 -lgdi32 -lwinspool -lshell32 -lole32 (add library file)
-loleaut32 -luuid -lcomdlg32 -ladvapi32 (add library file)

CMakeFiles\TestGeoSceneWriter.dir/objects.a(TestGeoSceneWriter.obj):TestGeoSceneWriter.cpp:(.text+0x4a0): undefined reference to `Marble::GeoSceneTexture::GeoSceneTexture(QString const&)'

CMakeFiles\TestGeoSceneWriter.dir/objects.a(TestGeoSceneWriter.obj):TestGeoSceneWriter.cpp:(.text+0x4dc): undefined reference to `Marble::GeoSceneTexture::setSourceDir(QString const&)'

CMakeFiles\TestGeoSceneWriter.dir/objects.a(TestGeoSceneWriter.obj):TestGeoSceneWriter.cpp:(.text+0x54a): undefined reference to `Marble::GeoSceneTexture::setProjection(Marble::GeoSceneTexture::Projection)'

CMakeFiles\TestGeoSceneWriter.dir/objects.a(TestGeoSceneWriter.obj):TestGeoSceneWriter.cpp:(.text+0x585): undefined reference to `Marble::GeoSceneTexture::addDownloadUrl(QUrl const&)'

CMakeFiles\TestGeoSceneWriter.dir/objects.a(TestGeoSceneWriter.obj):TestGeoSceneWriter.cpp:(.text+0x5e1): undefined reference to `Marble::GeoSceneTexture::addDownloadUrl(QUrl const&)'

CMakeFiles\TestGeoSceneWriter.dir/objects.a(TestGeoSceneWriter.obj):TestGeoSceneWriter.cpp:(.text+0x61b): undefined reference to `Marble::GeoSceneTexture::addDownloadPolicy(Marble::DownloadUsage, int)'

CMakeFiles\TestGeoSceneWriter.dir/objects.a(TestGeoSceneWriter.obj):TestGeoSceneWriter.cpp:(.text+0x633): undefined reference to `Marble::GeoSceneTexture::addDownloadPolicy(Marble::DownloadUsage, int)'

CMakeFiles\TestGeoSceneWriter.dir/objects.a(TestGeoSceneWriter.obj):TestGeoSceneWriter.cpp:(.text+0x643): undefined reference to `Marble::GeoSceneTexture::setMaximumTileLevel(int)'

CMakeFiles\TestGeoSceneWriter.dir/objects.a(TestGeoSceneWriter.obj):TestGeoSceneWriter.cpp:(.text+0x653): undefined reference to `Marble::GeoSceneTexture::setLevelZeroColumns(int)'

CMakeFiles\TestGeoSceneWriter.dir/objects.a(TestGeoSceneWriter.obj):TestGeoSceneWriter.cpp:(.text+0x663): undefined reference to `Marble::GeoSceneTexture::setLevelZeroRows(int)'

CMakeFiles\TestGeoSceneWriter.dir/objects.a(TestGeoSceneWriter.obj):TestGeoSceneWriter.cpp:(.text+0x996): undefined reference to `Marble::GeoSceneVector::GeoSceneVector(QString const&)'

CMakeFiles\TestGeoSceneWriter.dir/objects.a(TestGeoSceneWriter.obj):TestGeoSceneWriter.cpp:(.text+0x9d2): undefined reference to `Marble::GeoSceneVector::setFeature(QString const&)'

CMakeFiles\TestGeoSceneWriter.dir/objects.a(TestGeoSceneWriter.obj):TestGeoScene
Writer.cpp:(.text+0xa4b): undefined reference to `Marble::GeoSceneVector::setSourceFile(QString const&)'

CMakeFiles\TestGeoSceneWriter.dir/objects.a(TestGeoSceneWriter.obj):TestGeoSceneWriter.cpp:(.text+0xad5): undefined reference to `Marble::GeoSceneVector::pen()const'

CMakeFiles\TestGeoSceneWriter.dir/objects.a(TestGeoSceneWriter.obj):TestGeoSceneWriter.cpp:(.text+0xdfc): undefined reference to `Marble::GeoSceneSection::GeoSceneSection(QString const&)'

CMakeFiles\TestGeoSceneWriter.dir/objects.a(TestGeoSceneWriter.obj):TestGeoSceneWriter.cpp:(.text+0xe44): undefined reference to `Marble::GeoSceneSection::setHeading(QString const&)'

CMakeFiles\TestGeoSceneWriter.dir/objects.a(TestGeoSceneWriter.obj):TestGeoSceneWriter.cpp:(.text+0xeb3): undefined reference to `Marble::GeoSceneItem::GeoSceneItem(QString const&)'

CMakeFiles\TestGeoSceneWriter.dir/objects.a(TestGeoSceneWriter.obj):TestGeoSceneWriter.cpp:(.text+0xefb): undefined reference to `Marble::GeoSceneItem::setText(QString const&)'

CMakeFiles\TestGeoSceneWriter.dir/objects.a(TestGeoSceneWriter.obj):TestGeoSceneWriter.cpp:(.text+0xf22): undefined reference to `Marble::GeoSceneItem::icon()'

CMakeFiles\TestGeoSceneWriter.dir/objects.a(TestGeoSceneWriter.obj):TestGeoSceneWriter.cpp:(.text+0xf83): undefined reference to `Marble::GeoSceneSection::addItem(Marble::GeoSceneItem*)'

CMakeFiles\TestGeoSceneWriter.dir/objects.a(TestGeoSceneWriter.obj):TestGeoSceneWriter.cpp:(.text+0xfc0): undefined reference to `Marble::GeoSceneItem::GeoSceneItem(QString const&)'

CMakeFiles\TestGeoSceneWriter.dir/objects.a(TestGeoSceneWriter.obj):TestGeoSceneWriter.cpp:(.text+0x1008): undefined reference to `Marble::GeoSceneItem::setText(QString const&)'

CMakeFiles\TestGeoSceneWriter.dir/objects.a(TestGeoSceneWriter.obj):TestGeoSceneWriter.cpp:(.text+0x102f): undefined reference to `Marble::GeoSceneItem::icon()'

CMakeFiles\TestGeoSceneWriter.dir/objects.a(TestGeoSceneWriter.obj):TestGeoSceneWriter.cpp:(.text+0x10ad): undefined reference to `Marble::GeoSceneSection::addItem(Marble::GeoSceneItem*)'

collect2: ld returned 1 exit status
mingw32-make[2]: *** [tests/TestGeoSceneWriter.exe] Error 1
mingw32-make[2]: Leaving directory `M:/_Exchange/Qt/Marble-Build'
mingw32-make[1]: *** [tests/CMakeFiles/TestGeoSceneWriter.dir/all] Error 2
mingw32-make[1]: Leaving directory `M:/_Exchange/Qt/Marble-Build'
mingw32-make: *** [all] Error 2
User avatar
bcooksley
Administrator
Posts
19765
Karma
87
OS
This could have been a transient error in Marble's build system, so try updating your sources and building again.


KDE Sysadmin
[img]content/bcooksley_sig.png[/img]
User avatar
tackat
KDE Developer
Posts
131
Karma
0
OS
Hi,

Looks like the tests don't get properly built on the Windows platform. I've also heard this from Christophe, our Winodws packager in the Marble team just yesterday. We'll try and fix it as soon as possible.

Could you please send all your Marble questions to our mailing list marble-devel@kde.org ? This will ensure that you get proper help. Thanks!

Best Regards,

Torsten
Radioguy00
Registered Member
Posts
2
Karma
0
OS
OK Thank you for your replies

I'll wait and see

For now I have just emptied the body of TestGeoSceneWriter !
User avatar
Earthwings
KDE Developer
Posts
172
Karma
1
OS
I think we should either disable building tests on Windows or enable hidden visibility in the Qt only version. Otherwise errors like this easily slip through because none of us uses Windows regularly. Currently the KDE version enables -fvisibility=hidden but not the tests, while the Qt-Only build does the reverse. Both works fine on Linux, but Windows implies -fvisibility=hidden, leading to undefined references in the not exported classes used in the tests.

Maybe we can also disable tests based on the visibility setting. I don't like to export some classes just to be able to use them for tests. That makes it harder to keep ABI in future releases.

To contribute something more constructive: Passing -DBUILD_MARBLE_TESTS=OFF to cmake should disable the build of the tests and work around the issue.


Bookmarks



Who is online

Registered users: Bing [Bot], claydoh, Google [Bot], rblackwell