Can't compile Mongodb and Qt with cmake

59 Views Asked by At

I have cmake file

cmake_minimum_required(VERSION 3.5)

project(CmakeCBT VERSION 0.1 LANGUAGES CXX)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

include_directories("${CMAKE_CURRENT_LIST_DIR}/include")
include_directories("${CMAKE_CURRENT_LIST_DIR}/bin")
include_directories("${CMAKE_CURRENT_LIST_DIR}/lib")
include_directories("${CMAKE_CURRENT_LIST_DIR}/share")

find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)

set(libbsoncxx_DIR "${CMAKE_CURRENT_LIST_DIR}/share/libbsoncxx")
set(libmongocxx_DIR "${CMAKE_CURRENT_LIST_DIR}/share/libmongocxx")

find_package(libbsoncxx REQUIRED)
find_package(libmongocxx REQUIRED)



set(PROJECT_SOURCES
        main.cpp
        startwindow.cpp
        startwindow.h
        startwindow.ui
        studentwindow.cpp
        studentwindow.h
        studentwindow.ui
        dbcontroller.cpp
        dbcontroller.h
        errors.h
        errors.cpp
)


qt_add_executable(CmakeCBT
    MANUAL_FINALIZATION
    ${PROJECT_SOURCES}
)

target_link_libraries(CmakeCBT PUBLIC "${CMAKE_CURRENT_LIST_DIR}/lib/bsoncxx.lib")
target_link_libraries(CmakeCBT PUBLIC "${CMAKE_CURRENT_LIST_DIR}/lib/mongocxx.lib")
target_link_libraries(CmakeCBT PUBLIC "${CMAKE_CURRENT_LIST_DIR}/lib/bson-1.0.lib")
target_link_libraries(CmakeCBT PUBLIC "${CMAKE_CURRENT_LIST_DIR}/lib/mongoc-1.0.lib")
target_link_libraries(CmakeCBT PUBLIC "${CMAKE_CURRENT_LIST_DIR}/lib/zlib.lib")

target_link_libraries(CmakeCBT PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)

if(${QT_VERSION} VERSION_LESS 6.1.0)
  set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.example.CmakeCBT)
endif()
set_target_properties(CmakeCBT PROPERTIES
    ${BUNDLE_ID_OPTION}
    MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
    MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
    MACOSX_BUNDLE TRUE
    WIN32_EXECUTABLE TRUE
)

include(GNUInstallDirs)
install(TARGETS CmakeCBT
    BUNDLE DESTINATION .
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

if(QT_VERSION_MAJOR EQUAL 6)
    qt_finalize_executable(CmakeCBT)
endif()

and error

[1/5 3.3/sec] Automatic MOC and UIC for target CmakeCBT
[2/4 0.8/sec] Building CXX object CMakeFiles/CmakeCBT.dir/studentwindow.cpp.obj
[3/4 0.9/sec] Building CXX object CMakeFiles/CmakeCBT.dir/startwindow.cpp.obj
[4/4 1.1/sec] Linking CXX executable CmakeCBT.exe
FAILED: CmakeCBT.exe 
cmd.exe /C "cd . && C:\Qt\Tools\mingw1120_64\bin\g++.exe -DQT_QML_DEBUG -g -mwindows CMakeFiles/CmakeCBT.dir/CmakeCBT_autogen/mocs_compilation.cpp.obj CMakeFiles/CmakeCBT.dir/main.cpp.obj CMakeFiles/CmakeCBT.dir/startwindow.cpp.obj CMakeFiles/CmakeCBT.dir/studentwindow.cpp.obj CMakeFiles/CmakeCBT.dir/dbcontroller.cpp.obj CMakeFiles/CmakeCBT.dir/model.cpp.obj CMakeFiles/CmakeCBT.dir/errors.cpp.obj -o CmakeCBT.exe -Wl,--out-implib,libCmakeCBT.dll.a -Wl,--major-image-version,0,--minor-image-version,0  D:/Qt/CMAKESBT/CmakeCBT/lib/bsoncxx.lib  D:/Qt/CMAKESBT/CmakeCBT/lib/mongocxx.lib  D:/Qt/CMAKESBT/CmakeCBT/lib/bson-1.0.lib  D:/Qt/CMAKESBT/CmakeCBT/lib/mongoc-1.0.lib  D:/Qt/CMAKESBT/CmakeCBT/lib/zlib.lib  C:/Qt/6.6.0/mingw_64/lib/libQt6Widgets.a  C:/Qt/6.6.0/mingw_64/lib/libQt6Gui.a  C:/Qt/6.6.0/mingw_64/lib/libQt6Core.a  -lmpr  -luserenv  -lmingw32  C:/Qt/6.6.0/mingw_64/lib/libQt6EntryPoint.a  -lshell32  -ld3d11  -ldxgi  -ldxguid  -ld3d12  -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 && cd ."
C:/Qt/Tools/mingw1120_64/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles/CmakeCBT.dir/dbcontroller.cpp.obj: in function `DBController::DBController()':
D:/Qt/CMAKESBT/CmakeCBT/dbcontroller.cpp:3: undefined reference to `__imp__ZN8mongocxx7v_noabi8instanceC1Ev'
C:/Qt/Tools/mingw1120_64/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: D:/Qt/CMAKESBT/CmakeCBT/dbcontroller.cpp:7: undefined reference to `__imp__ZN8mongocxx7v_noabi8instanceC1Ev'
C:/Qt/Tools/mingw1120_64/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: D:/Qt/CMAKESBT/CmakeCBT/dbcontroller.cpp:7: undefined reference to `__imp__ZN8mongocxx7v_noabi8instanceaSEOS1_'
C:/Qt/Tools/mingw1120_64/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: D:/Qt/CMAKESBT/CmakeCBT/dbcontroller.cpp:7: undefined reference to `__imp__ZN8mongocxx7v_noabi8instanceD1Ev'
C:/Qt/Tools/mingw1120_64/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: D:/Qt/CMAKESBT/CmakeCBT/dbcontroller.cpp:8: undefined reference to `__imp__ZN8mongocxx7v_noabi3uriC1EN7bsoncxx7v_noabi6string13view_or_valueE'
C:/Qt/Tools/mingw1120_64/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: D:/Qt/CMAKESBT/CmakeCBT/dbcontroller.cpp:11: undefined reference to `__imp__ZN8mongocxx7v_noabi7options10server_apiC1ENS2_7versionE'
C:/Qt/Tools/mingw1120_64/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: D:/Qt/CMAKESBT/CmakeCBT/dbcontroller.cpp:12: undefined reference to `__imp__ZN8mongocxx7v_noabi7options6client15server_api_optsENS1_10server_apiE'
C:/Qt/Tools/mingw1120_64/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: D:/Qt/CMAKESBT/CmakeCBT/dbcontroller.cpp:14: undefined reference to `__imp__ZN8mongocxx7v_noabi6clientC1ERKNS0_3uriERKNS0_7options6clientE'
C:/Qt/Tools/mingw1120_64/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: D:/Qt/CMAKESBT/CmakeCBT/dbcontroller.cpp:14: undefined reference to `__imp__ZN8mongocxx7v_noabi6clientaSEOS1_'


D:/Qt/CMAKESBT/CmakeCBT/include/bsoncxx/builder/basic/sub_document.hpp:85: undefined reference to `__imp__ZN7bsoncxx7v_noabi7builder4core8key_viewESt17basic_string_viewIcSt11char_traitsIcEE'
C:/Qt/Tools/mingw1120_64/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles/CmakeCBT.dir/dbcontroller.cpp.obj: in function `std::enable_if<(!std::is_convertible<int, std::function<void (bsoncxx::v_noabi::builder::basic::sub_document)> >::value)&&(!std::is_convertible<int, std::function<void (bsoncxx::v_noabi::builder::basic::sub_array)> >::value), void>::type bsoncxx::v_noabi::builder::basic::impl::generic_append<int>(bsoncxx::v_noabi::builder::core*, int&&)':
D:/Qt/CMAKESBT/CmakeCBT/include/bsoncxx/builder/basic/impl.hpp:55: undefined reference to `__imp__ZN7bsoncxx7v_noabi7builder4core6appendEi'
C:/Qt/Tools/mingw1120_64/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles/CmakeCBT.dir/dbcontroller.cpp.obj:dbcontroller.c:(.rdata$.refptr._ZN12DBController10singleton_E[.refptr._ZN12DBController10singleton_E]+0x0): undefined reference to `DBController::singleton_'
collect2.exe: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.

It seems that the linker cannot find the definition of these functions despite the provided lib files. My system is Windows. mongocxx was built with vkpg.

I tried changing the compiler from mingw to msvc. include lib instead of dill. and many other things. But all my attempts were even.

0

There are 0 best solutions below