我已经按照官方网站上提供的说明构建了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;
}
注意:我已经在主要功能中包含了必需的标题。我已经为其他第三方库做过上述工作,这对我来说很好。
我该如何解决?
您尚未指定共享导入目标本身(即DLL文件)的位置。从CMake文档中,使用属性IMPORT_IMPLIB
时,您应该: