Le mer. 15 août 2018 à 10:32, Damir Porobic <damir_poro...@live.com> a écrit :
> Hi Folks, > > > I'm trying to write a shared library and run into an issue where I can't > find any clues to where the problem is. > > I have a project with following structure: > > > src/ > > dir1/ > > file1.h > > file1.cpp > > dir2/ > > file2.h > file2.cpp > > > > Now I have this CMakeList: > > cmake_minimum_required(VERSION 3.5) > > project(kImageAnnotator VERSION 0.0.1 LANGUAGES CXX) > > ... > > > add_library(${PROJECT_NAME} SHARED ${kimageannotator_SRCS}) > target_link_libraries(${PROJECT_NAME} Qt5::Widgets KF5::CoreAddons > KF5::I18n KF5::WidgetsAddons) > > target_include_directories(${PROJECT_NAME} PUBLIC > $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}> $<INSTALL_INTERFACE:include>) > > set_target_properties(${PROJECT_NAME} PROPERTIES VERSION > ${PROJECT_VERSION} SOVERSION 1) > > set(kimageannotator_CONFIG ${PROJECT_NAME}Config) > > install(TARGETS ${PROJECT_NAME} EXPORT ${kimageannotator_CONFIG} > ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} > LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} > RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) > install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} DESTINATION > ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}) > > install(EXPORT ${kimageannotator_CONFIG} DESTINATION > share/${kimageannotator_CONFIG}/cmake) > > export(TARGETS ${PROJECT_NAME} FILE ${kimageannotator_CONFIG}.cmake) > > > In another test project, I add the library like this: > ... > find_package(kImageAnnotator REQUIRED) > > add_executable(testApp main.cpp) > target_link_libraries(testApp Qt5::Widgets kImageAnnotator) > > > Now when I try to build my test project, I get this: > > dporobic@linux ~/projects/testApp/build > $ cmake .. && make > -- Could not set up the appstream test. appstreamcli is missing. > -- Configuring done > -- Generating done > -- Build files have been written to: /home/dporobic/projects/testApp/build > [ 25%] Automatic moc for target testApp > [ 25%] Built target testApp_automoc > Scanning dependencies of target testApp > [ 50%] Building CXX object CMakeFiles/testApp.dir/main.cpp.o > [ 75%] Building CXX object CMakeFiles/testApp.dir/testApp_automoc.cpp.o > [100%] Linking CXX executable testApp > CMakeFiles/testApp.dir/main.cpp.o: In function `main': > main.cpp:(.text+0x8e): undefined reference to > `KImageAnnotator::KImageAnnotator(QPixmap const&)' > collect2: error: ld returned 1 exit status > CMakeFiles/testApp.dir/build.make:120: recipe for target 'testApp' failed > make[2]: *** [testApp] Error 1 > CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/testApp.dir/all' > failed > make[1]: *** [CMakeFiles/testApp.dir/all] Error 2 > Makefile:94: recipe for target 'all' failed > make: *** [all] Error 2 > > Any idea how I could/should troubleshoot such issue? > Try to compile in verbose mode make VERBOSE=1 and have a look at the culprit link line. You should see the reference to your previously built shared lib. Check whether this lib is where it should be (may be you didn't install it?) then check which kImageAnnotatorConfig.cmake file is used by the testApp project in order to see if any [wrong and not up to date] test & trial version of this file is lying around. -- Eric
-- Powered by www.kitware.com Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Kitware offers various services to support the CMake community. For more information on each offering, please visit: CMake Support: http://cmake.org/cmake/help/support.html CMake Consulting: http://cmake.org/cmake/help/consulting.html CMake Training Courses: http://cmake.org/cmake/help/training.html Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Follow this link to subscribe/unsubscribe: https://cmake.org/mailman/listinfo/cmake