Bug 382703 - Compile error with cmake 3.9
Summary: Compile error with cmake 3.9
Status: RESOLVED FIXED
Alias: None
Product: digikam
Classification: Applications
Component: Portability-Cmake (show other bugs)
Version: 5.6.0
Platform: Other Linux
: NOR normal
Target Milestone: ---
Assignee: Digikam Developers
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2017-07-25 10:34 UTC by rezso
Modified: 2022-01-31 16:30 UTC (History)
5 users (show)

See Also:
Latest Commit:
Version Fixed In: 5.7.0


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description rezso 2017-07-25 10:34:01 UTC
Compiling 5.6.0 release with cmake 3.7.2 is successful, but fails with cmake 3.9:

[ 98%] Linking CXX shared library libdigikamdatabase.so
../models/CMakeFiles/digikamdatabasemodels_src.dir/imagemodel.cpp.o: In function `Digikam::ImageModel::ImageModel(QObject*)':
imagemodel.cpp:(.text+0x3e): undefined reference to `vtable for Digikam::ImageModel'
imagemodel.cpp:(.text+0x4c): undefined reference to `vtable for Digikam::ImageModel'
../models/CMakeFiles/digikamdatabasemodels_src.dir/imagemodel.cpp.o: In function `Digikam::ImageModel::~ImageModel()':
imagemodel.cpp:(.text+0x1a0): undefined reference to `vtable for Digikam::ImageModel'
imagemodel.cpp:(.text+0x1ae): undefined reference to `vtable for Digikam::ImageModel'
../models/CMakeFiles/digikamdatabasemodels_src.dir/imagemodel.cpp.o: In function `Digikam::ImageModel::addImageInfosSynchronously(QList<Digikam::ImageInfo> const&, QList<QVariant> const&)':
imagemodel.cpp:(.text+0x19db): undefined reference to `Digikam::ImageModel::processAdded(QList<Digikam::ImageInfo> const&, QList<QVariant> const&)'
../models/CMakeFiles/digikamdatabasemodels_src.dir/imagemodel.cpp.o: In function `Digikam::ImageModel::appendInfos(QList<Digikam::ImageInfo> const&, QList<QVariant> const&)':
imagemodel.cpp:(.text+0x2656): undefined reference to `Digikam::ImageModel::preprocess(QList<Digikam::ImageInfo> const&, QList<QVariant> const&)'
../models/CMakeFiles/digikamdatabasemodels_src.dir/imagemodel.cpp.o: In function `Digikam::ImageModel::cleanSituationChecks()':
imagemodel.cpp:(.text+0x2ad1): undefined reference to `Digikam::ImageModel::readyForIncrementalRefresh()'
imagemodel.cpp:(.text+0x2ae1): undefined reference to `Digikam::ImageModel::allRefreshingFinished()'
../models/CMakeFiles/digikamdatabasemodels_src.dir/imagemodel.cpp.o: In function `Digikam::ImageModel::publiciseInfos(QList<Digikam::ImageInfo> const&, QList<QVariant> const&)':
imagemodel.cpp:(.text+0x2b9a): undefined reference to `Digikam::ImageModel::imageInfosAboutToBeAdded(QList<Digikam::ImageInfo> const&)'
imagemodel.cpp:(.text+0x2d15): undefined reference to `Digikam::ImageModel::imageInfosAdded(QList<Digikam::ImageInfo> const&)'
../models/CMakeFiles/digikamdatabasemodels_src.dir/imagemodel.cpp.o: In function `Digikam::ImageModel::requestIncrementalRefresh()':
imagemodel.cpp:(.text+0x2d7a): undefined reference to `Digikam::ImageModel::readyForIncrementalRefresh()'
../models/CMakeFiles/digikamdatabasemodels_src.dir/imagemodel.cpp.o: In function `Digikam::ImageModel::removeRowPairs(QList<QPair<int, int> > const&)':
imagemodel.cpp:(.text+0x36f7): undefined reference to `Digikam::ImageModel::imageInfosAboutToBeRemoved(QList<Digikam::ImageInfo> const&)'
imagemodel.cpp:(.text+0x399d): undefined reference to `Digikam::ImageModel::imageInfosRemoved(QList<Digikam::ImageInfo> const&)'
../models/CMakeFiles/digikamdatabasemodels_src.dir/imagemodel.cpp.o: In function `Digikam::ImageModel::slotImageChange(Digikam::ImageChangeset const&)':
imagemodel.cpp:(.text+0x4a7a): undefined reference to `Digikam::ImageModel::imageChange(Digikam::ImageChangeset const&, QItemSelection const&)'
../models/CMakeFiles/digikamdatabasemodels_src.dir/imagemodel.cpp.o: In function `Digikam::ImageModel::slotImageTagChange(Digikam::ImageTagChangeset const&)':
imagemodel.cpp:(.text+0x4c5d): undefined reference to `Digikam::ImageModel::imageTagChange(Digikam::ImageTagChangeset const&, QItemSelection const&)'
../models/CMakeFiles/digikamdatabasemodels_src.dir/imagemodel.cpp.o: In function `QtPrivate::MetaObjectForType<Digikam::ImageModel*, void>::value()':
imagemodel.cpp:(.text._ZN9QtPrivate17MetaObjectForTypeIPN7Digikam10ImageModelEvE5valueEv[_ZN9QtPrivate17MetaObjectForTypeIPN7Digikam10ImageModelEvE5valueEv]+0xf): undefined reference to `Digikam::ImageModel::staticMetaObject'
../models/CMakeFiles/digikamdatabasemodels_src.dir/imagemodel.cpp.o: In function `Digikam::ImageModel* qobject_cast<Digikam::ImageModel*>(QObject*)':
imagemodel.cpp:(.text._Z12qobject_castIPN7Digikam10ImageModelEET_P7QObject[_Z12qobject_castIPN7Digikam10ImageModelEET_P7QObject]+0x19): undefined reference to `Digikam::ImageModel::staticMetaObject'
../models/CMakeFiles/digikamdatabasemodels_src.dir/imagefiltermodel.cpp.o: In function `Digikam::ImageSortFilterModel::ImageSortFilterModel(QObject*)':
imagefiltermodel.cpp:(.text+0x26): undefined reference to `vtable for Digikam::ImageSortFilterModel'
../models/CMakeFiles/digikamdatabasemodels_src.dir/imagefiltermodel.cpp.o: In function `Digikam::ImageFilterModel::ImageFilterModel(QObject*)':
imagefiltermodel.cpp:(.text+0xb90): undefined reference to `vtable for Digikam::ImageFilterModel'
../models/CMakeFiles/digikamdatabasemodels_src.dir/imagefiltermodel.cpp.o: In function `Digikam::ImageFilterModel::ImageFilterModel(Digikam::ImageFilterModel::ImageFilterModelPrivate&, QObject*)':
imagefiltermodel.cpp:(.text+0xc40): undefined reference to `vtable for Digikam::ImageFilterModel'
../models/CMakeFiles/digikamdatabasemodels_src.dir/imagefiltermodel.cpp.o: In function `Digikam::ImageFilterModel::~ImageFilterModel()':
imagefiltermodel.cpp:(.text+0xca6): undefined reference to `vtable for Digikam::ImageFilterModel'
../models/CMakeFiles/digikamdatabasemodels_src.dir/imagefiltermodel.cpp.o: In function `Digikam::ImageFilterModel::setImageFilterSettings(Digikam::ImageFilterSettings const&)':
imagefiltermodel.cpp:(.text+0x19a6): undefined reference to `Digikam::ImageFilterModel::filterSettingsChanged(Digikam::ImageFilterSettings const&)'
../models/CMakeFiles/digikamdatabasemodels_src.dir/imagefiltermodel.cpp.o: In function `Digikam::ImageFilterModel::slotRowsInserted(QModelIndex const&, int, int)':
imagefiltermodel.cpp:(.text+0x227d): undefined reference to `Digikam::ImageFilterModel::imageInfosAdded(QList<Digikam::ImageInfo> const&)'
../models/CMakeFiles/digikamdatabasemodels_src.dir/imagefiltermodel.cpp.o: In function `Digikam::ImageFilterModel::slotRowsAboutToBeRemoved(QModelIndex const&, int, int)':
imagefiltermodel.cpp:(.text+0x2385): undefined reference to `Digikam::ImageFilterModel::imageInfosAboutToBeRemoved(QList<Digikam::ImageInfo> const&)'
../models/CMakeFiles/digikamdatabasemodels_src.dir/imagefiltermodel.cpp.o: In function `Digikam::ImageFilterModelPreparer::process(Digikam::ImageFilterModelTodoPackage)':
imagefiltermodel.cpp:(.text+0x252b): undefined reference to `Digikam::ImageFilterModelWorker::discarded(Digikam::ImageFilterModelTodoPackage const&)'
imagefiltermodel.cpp:(.text+0x266b): undefined reference to `Digikam::ImageFilterModelWorker::discarded(Digikam::ImageFilterModelTodoPackage const&)'
imagefiltermodel.cpp:(.text+0x27df): undefined reference to `Digikam::ImageFilterModelWorker::processed(Digikam::ImageFilterModelTodoPackage const&)'
../models/CMakeFiles/digikamdatabasemodels_src.dir/imagefiltermodel.cpp.o: In function `Digikam::ImageFilterModelFilterer::process(Digikam::ImageFilterModelTodoPackage)':
imagefiltermodel.cpp:(.text+0x28cf): undefined reference to `Digikam::ImageFilterModelWorker::discarded(Digikam::ImageFilterModelTodoPackage const&)'
imagefiltermodel.cpp:(.text+0x2dfb): undefined reference to `Digikam::ImageFilterModelWorker::processed(Digikam::ImageFilterModelTodoPackage const&)'
../models/CMakeFiles/digikamdatabasemodels_src.dir/imagefiltermodel.cpp.o: In function `Digikam::NoDuplicatesImageFilterModel::NoDuplicatesImageFilterModel(QObject*)':
imagefiltermodel.cpp:(.text+0x3ee8): undefined reference to `vtable for Digikam::NoDuplicatesImageFilterModel'
../models/CMakeFiles/digikamdatabasemodels_src.dir/imagefiltermodel.cpp.o: In function `Digikam::ImageSortFilterModel::~ImageSortFilterModel()':
imagefiltermodel.cpp:(.text._ZN7Digikam20ImageSortFilterModelD2Ev[_ZN7Digikam20ImageSortFilterModelD5Ev]+0x13): undefined reference to `vtable for Digikam::ImageSortFilterModel'
../models/CMakeFiles/digikamdatabasemodels_src.dir/imagefiltermodel.cpp.o: In function `QtPrivate::MetaObjectForType<Digikam::ImageFilterModel*, void>::value()':
imagefiltermodel.cpp:(.text._ZN9QtPrivate17MetaObjectForTypeIPN7Digikam16ImageFilterModelEvE5valueEv[_ZN9QtPrivate17MetaObjectForTypeIPN7Digikam16ImageFilterModelEvE5valueEv]+0xf): undefined reference to `Digikam::ImageFilterModel::staticMetaObject'
../models/CMakeFiles/digikamdatabasemodels_src.dir/imagefiltermodelpriv.cpp.o: In function `Digikam::ImageFilterModel::ImageFilterModelPrivate::ImageFilterModelPrivate()':
imagefiltermodelpriv.cpp:(.text+0x29): undefined reference to `vtable for Digikam::ImageFilterModel::ImageFilterModelPrivate'
../models/CMakeFiles/digikamdatabasemodels_src.dir/imagefiltermodelpriv.cpp.o: In function `Digikam::ImageFilterModel::ImageFilterModelPrivate::~ImageFilterModelPrivate()':
imagefiltermodelpriv.cpp:(.text+0x2d0): undefined reference to `vtable for Digikam::ImageFilterModel::ImageFilterModelPrivate'
../models/CMakeFiles/digikamdatabasemodels_src.dir/imagefiltermodelpriv.cpp.o: In function `Digikam::ImageFilterModel::ImageFilterModelPrivate::infosToProcess(QList<Digikam::ImageInfo> const&, QList<QVariant> const&, bool)':
imagefiltermodelpriv.cpp:(.text+0xca6): undefined reference to `Digikam::ImageFilterModel::ImageFilterModelPrivate::packageToPrepare(Digikam::ImageFilterModelTodoPackage const&)'
imagefiltermodelpriv.cpp:(.text+0xcf7): undefined reference to `Digikam::ImageFilterModel::ImageFilterModelPrivate::packageToFilter(Digikam::ImageFilterModelTodoPackage const&)'
../models/CMakeFiles/digikamdatabasemodels_src.dir/imagefiltermodelpriv.cpp.o: In function `Digikam::ImageFilterModel::ImageFilterModelPrivate::packageFinished(Digikam::ImageFilterModelTodoPackage const&)':
imagefiltermodelpriv.cpp:(.text+0xea4): undefined reference to `Digikam::ImageFilterModel::ImageFilterModelPrivate::reAddImageInfos(QList<Digikam::ImageInfo> const&, QList<QVariant> const&)'
imagefiltermodelpriv.cpp:(.text+0xee0): undefined reference to `Digikam::ImageFilterModel::ImageFilterModelPrivate::reAddingFinished()'
imagefiltermodelpriv.cpp:(.text+0xf94): undefined reference to `Digikam::ImageFilterModel::filterMatches(bool)'
imagefiltermodelpriv.cpp:(.text+0xfb6): undefined reference to `Digikam::ImageFilterModel::filterMatchesForText(bool)'
../models/CMakeFiles/digikamdatabasemodels_src.dir/imagefiltermodelpriv.cpp.o: In function `Digikam::ImageFilterModel::ImageFilterModelPrivate::packageDiscarded(Digikam::ImageFilterModelTodoPackage const&)':
imagefiltermodelpriv.cpp:(.text+0x10a0): undefined reference to `Digikam::ImageFilterModel::ImageFilterModelPrivate::packageToPrepare(Digikam::ImageFilterModelTodoPackage const&)'
imagefiltermodelpriv.cpp:(.text+0x10f9): undefined reference to `Digikam::ImageFilterModel::ImageFilterModelPrivate::packageToFilter(Digikam::ImageFilterModelTodoPackage const&)'
../models/CMakeFiles/digikamdatabasemodels_src.dir/imagefiltermodelpriv.cpp.o: In function `Digikam::ImageFilterModelPreparer::ImageFilterModelPreparer(Digikam::ImageFilterModel::ImageFilterModelPrivate*)':
imagefiltermodelpriv.cpp:(.text._ZN7Digikam24ImageFilterModelPreparerC2EPNS_16ImageFilterModel23ImageFilterModelPrivateE[_ZN7Digikam24ImageFilterModelPreparerC5EPNS_16ImageFilterModel23ImageFilterModelPrivateE]+0x26): undefined reference to `vtable for Digikam::ImageFilterModelPreparer'
../models/CMakeFiles/digikamdatabasemodels_src.dir/imagefiltermodelpriv.cpp.o: In function `Digikam::ImageFilterModelFilterer::ImageFilterModelFilterer(Digikam::ImageFilterModel::ImageFilterModelPrivate*)':
imagefiltermodelpriv.cpp:(.text._ZN7Digikam24ImageFilterModelFiltererC2EPNS_16ImageFilterModel23ImageFilterModelPrivateE[_ZN7Digikam24ImageFilterModelFiltererC5EPNS_16ImageFilterModel23ImageFilterModelPrivateE]+0x26): undefined reference to `vtable for Digikam::ImageFilterModelFilterer'
../models/CMakeFiles/digikamdatabasemodels_src.dir/imagefiltermodelthreads.cpp.o: In function `Digikam::ImageFilterModelWorker::ImageFilterModelWorker(Digikam::ImageFilterModel::ImageFilterModelPrivate*)':
imagefiltermodelthreads.cpp:(.text+0x23): undefined reference to `vtable for Digikam::ImageFilterModelWorker'
../models/CMakeFiles/digikamdatabasemodels_src.dir/imagelistmodel.cpp.o: In function `Digikam::ImageListModel::ImageListModel(QObject*)':
imagelistmodel.cpp:(.text+0x2a): undefined reference to `vtable for Digikam::ImageListModel'
imagelistmodel.cpp:(.text+0x38): undefined reference to `vtable for Digikam::ImageListModel'
../models/CMakeFiles/digikamdatabasemodels_src.dir/imagelistmodel.cpp.o: In function `Digikam::ImageListModel::~ImageListModel()':
imagelistmodel.cpp:(.text+0xeb): undefined reference to `vtable for Digikam::ImageListModel'
imagelistmodel.cpp:(.text+0xf9): undefined reference to `vtable for Digikam::ImageListModel'
../models/CMakeFiles/digikamdatabasemodels_src.dir/imagethumbnailmodel.cpp.o: In function `Digikam::ImageThumbnailModel::ImageThumbnailModel(QObject*)':
imagethumbnailmodel.cpp:(.text+0x2a): undefined reference to `vtable for Digikam::ImageThumbnailModel'
imagethumbnailmodel.cpp:(.text+0x38): undefined reference to `vtable for Digikam::ImageThumbnailModel'
../models/CMakeFiles/digikamdatabasemodels_src.dir/imagethumbnailmodel.cpp.o: In function `Digikam::ImageThumbnailModel::~ImageThumbnailModel()':
imagethumbnailmodel.cpp:(.text+0xd2): undefined reference to `vtable for Digikam::ImageThumbnailModel'
imagethumbnailmodel.cpp:(.text+0xe0): undefined reference to `vtable for Digikam::ImageThumbnailModel'
../models/CMakeFiles/digikamdatabasemodels_src.dir/imagethumbnailmodel.cpp.o: In function `Digikam::ImageThumbnailModel::slotThumbnailLoaded(Digikam::LoadingDescription const&, QPixmap const&)':
imagethumbnailmodel.cpp:(.text+0x108b): undefined reference to `Digikam::ImageThumbnailModel::thumbnailFailed(QModelIndex const&, int)'
imagethumbnailmodel.cpp:(.text+0x10aa): undefined reference to `Digikam::ImageThumbnailModel::thumbnailAvailable(QModelIndex const&, int)'
../models/CMakeFiles/digikamdatabasemodels_src.dir/imageversionsmodel.cpp.o: In function `Digikam::ImageVersionsModel::ImageVersionsModel(QObject*)':
imageversionsmodel.cpp:(.text+0x2a): undefined reference to `vtable for Digikam::ImageVersionsModel'
../models/CMakeFiles/digikamdatabasemodels_src.dir/imageversionsmodel.cpp.o: In function `Digikam::ImageVersionsModel::~ImageVersionsModel()':
imageversionsmodel.cpp:(.text+0xbc): undefined reference to `vtable for Digikam::ImageVersionsModel'
collect2: error: ld returned 1 exit status
make[2]: *** [core/libs/database/CMakeFiles/digikamdatabase.dir/build.make:240: core/libs/database/libdigikamdatabase.so.5.6.0] Error 1
make[1]: *** [CMakeFiles/Makefile2:3064: core/libs/database/CMakeFiles/digikamdatabase.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
Comment 1 Adam Stylinski 2017-07-26 20:05:54 UTC
I'm seeing similar linking errors errors (missing vtables for Digikam::ImageModel), though it's unclear if it's related to cmake versions.  I only have one version of CMake to test.
Comment 2 rezso 2017-07-26 20:49:08 UTC
I tried it: with cmake 3.7.2 the build is successful, with cmake 3.9.0 fails.
After downgrading cmake to 3.7.2, I can compile the code without any problems.

It seems to me, that cmake 3.9 uses different dependency tracking / linking method than older versions:
https://phabricator.kde.org/D6792
Comment 3 Adam Stylinski 2017-07-26 21:08:32 UTC
Ah, well as another data point I am in fact using CMake 3.9.
Comment 4 Rik Mills 2017-07-27 14:40:56 UTC
My 5.6 rebuild with cmake 3.9 fails in just this way

Kubuntu artful development version
cmake 3.9
Comment 5 caulier.gilles 2017-07-28 04:30:16 UTC
Fixed with current implementation from git/master (next 5.7.0)
Comment 6 Rik Mills 2017-07-28 04:37:02 UTC
(In reply to caulier.gilles from comment #5)
> Fixed with current implementation from git/master (next 5.7.0)

Can you reference an commit(s) please?

For now I will need to apply to 5.6
Comment 7 Simon 2017-07-28 08:04:29 UTC
You can find the commit where it was fixed at the top in the "Latest Commit" field:
https://cgit.kde.org/digikam.git/commit/?id=7e00441c257e7e9e5dc5ab983fc06046fb72b0c5
Comment 8 Rik Mills 2017-07-28 08:07:08 UTC
(In reply to Simon from comment #7)
> You can find the commit where it was fixed at the top in the "Latest Commit"
> field:
> https://cgit.kde.org/digikam.git/commit/
> ?id=7e00441c257e7e9e5dc5ab983fc06046fb72b0c5

I found that. Doesn't seem to apply to the 5.6.0 tarball though.
Comment 9 Simon 2017-07-28 08:17:38 UTC
The patch from that commit applies fine to 5.6.0 here. Did you apply within the core directory?
Comment 10 Rik Mills 2017-07-28 08:43:39 UTC
(In reply to Simon from comment #9)
> The patch from that commit applies fine to 5.6.0 here. Did you apply within
> the core directory?

It seems to. Apologies, I forget the directory layout in the tarball had that extra level. Hopefully this will build.