mongocxx-对所有函数的未定义引用

问题描述 投票:1回答:1

我已经按照官方网站上提供的说明构建了mongocxx和bsoncxx驱动程序。现在,我已将bsoncxx和mongocxx的.lib文件链接到我的C ++项目,并且如果我尝试运行main.cpp应用程序,它将引发错误,如下所述:

CMakeFiles\enabler_app.dir/objects.a(main.cpp.obj): In function `main':

main.cpp:12: undefined reference to `__imp__ZN8mongocxx7v_noabi8instanceC1Ev'
main.cpp:13: undefined reference to `__imp__ZN8mongocxx7v_noabi3uriC1EN7bsoncxx7v_noabi6string13view_or_valueE'
main.cpp:14: undefined reference to `__imp__ZN8mongocxx7v_noabi6clientC1ERKNS0_3uriERKNS0_7options6clientE'
main.cpp:16: undefined reference to `__imp__ZNK8mongocxx7v_noabi10collectioncvbEv'
main.cpp:16: undefined reference to `__imp__ZN8mongocxx7v_noabi10collectionD1Ev'
main.cpp:15: undefined reference to `__imp__ZN8mongocxx7v_noabi8databaseD1Ev'
main.cpp:14: undefined reference to `__imp__ZN8mongocxx7v_noabi6clientD1Ev'
main.cpp:13: undefined reference to `__imp__ZN8mongocxx7v_noabi3uriD1Ev'
main.cpp:12: undefined reference to `__imp__ZN8mongocxx7v_noabi8instanceD1Ev'

collect2.exe: error: ld returned 1 exit status
mingw32-make.exe[2]: *** [CMakeFiles\enabler_app.dir\build.make:137: enabler_app.exe] Error 1
mingw32-make.exe[1]: *** [CMakeFiles\Makefile2:75: CMakeFiles/enabler_app.dir/all] Error 2
mingw32-make.exe: *** [Makefile:83: all] Error 2

这些错误是由于链接问题引起的吗?现在,我只需在CMakeLists.txt中链接如下:

add_library(MONGOCXX SHARED IMPORTED)
set_property(TARGET MONGOCXX PROPERTY IMPORTED_IMPLIB ${CMAKE_CURRENT_LIST_DIR}/mongo_db_driver/lib/mongocxx.lib)
include_directories(${CMAKE_CURRENT_LIST_DIR}/mongo_db_driver/include/mongocxx/v_noabi)
target_link_libraries(${PROJECT_NAME} MONGOCXX)

add_library(BSONCXX SHARED IMPORTED)
set_property(TARGET BSONCXX PROPERTY IMPORTED_IMPLIB ${CMAKE_CURRENT_LIST_DIR}/mongo_db_driver/lib/bsoncxx.lib)
include_directories(${CMAKE_CURRENT_LIST_DIR}/mongo_db_driver/include/bsoncxx/v_noabi)
target_link_libraries(${PROJECT_NAME} BSONCXX)

add_library(MONGOC SHARED IMPORTED)
set_property(TARGET MONGOC PROPERTY IMPORTED_IMPLIB ${CMAKE_CURRENT_LIST_DIR}/mongo_c_driver/lib/mongoc-1.0.lib)
include_directories(${CMAKE_CURRENT_LIST_DIR}/mongo_c_driver/include/libmongoc-1.0)
target_link_libraries(${PROJECT_NAME} MONGOC)

add_library(BSONC SHARED IMPORTED)
set_property(TARGET BSONC PROPERTY IMPORTED_IMPLIB ${CMAKE_CURRENT_LIST_DIR}/mongo_c_driver/lib/bson-1.0.lib)
include_directories(${CMAKE_CURRENT_LIST_DIR}/mongo_c_driver/include/libbson-1.0)
target_link_libraries(${PROJECT_NAME} BSONC)

Main.cpp

int main () {
    mongocxx::instance instance{};
    mongocxx::uri uri("mongodb://localhost:27017");
    mongocxx::client client(uri);

    return 0;
}

注意:我已经在主要功能中包含了必需的标题。我已经为其他第三方库做过上述工作,这对我来说很好。

我该如何解决?

c++ mongodb cmake linker-errors mongo-cxx-driver
1个回答
0
投票

您尚未指定共享导入目标本身(即DLL文件)的位置。从CMake文档中,使用属性IMPORT_IMPLIB时,您应该:

© www.soinside.com 2019 - 2024. All rights reserved.