[英]C / C++ Library Linking with CMake
我需要在c ++項目中使用MongoDB C驅動程序。 我想使用CMake,因為我正在使用的IDE與它很好地集成,但編譯器無法識別MongoDB驅動程序
所以,我嘗試了更多的東西,並為您提供更多信息。 我做了以下腳本:
cmake_minimum_required(VERSION 3.2)
project(sorting)
set(ENV{PKG_CONFIG_PATH} "/usr/lib64")
find_package(PkgConfig REQUIRED)
pkg_search_module(MONGO REQUIRED mongoc-1.0)
message(SEND_ERROR "A ${MONGO_FOUND}") # Error:A 1
message(SEND_ERROR "B ${MONGO_LIBRARIES}") # Error:B ssl;crypto;rt;mongoc-1.0;bson-1.0
message(SEND_ERROR "C ${MONGO_LIBRARY_DIRS}") # Error:C /usr/lib64
message(SEND_ERROR "D ${MONGO_LDFLAGS}") # Error:D -L/usr/lib64;-lssl;-lcrypto;-lrt;-lmongoc-1.0;-lbson-1.0
message(SEND_ERROR "E ${MONGO_LDFLAGS_OTHER}")# Error:E
message(SEND_ERROR "F ${MONGO_INCLUDE_DIRS}") # Error:F /usr/include/libmongoc-1.0;/usr/include/libbson-1.0
message(SEND_ERROR "G ${MONGO_CFLAGS}") # Error:G -I/usr/include/libmongoc-1.0;-I/usr/include/libbson-1.0
message(SEND_ERROR "H ${MONGO_CFLAGS_OTHER}") # Error:H
include_directories(${MONGO_LIBRARY_DIRS})
include_directories(${MONGO_INCLUDE_DIRS})
#link_directories(${MONGO_LIBRARY_DIRS})
#link_directories(${MONGO_INCLUDE_DIRS})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(SOURCE_FILES main.cpp)
add_executable(sorting ${SOURCE_FILES})
target_link_libraries(sorting ${MONGO_LIBRARIES})
當我從我的cmake文件中刪除所有的message()
函數並嘗試構建運行include_directories
unomented的項目時,我收到此錯誤:
error while loading shared libraries: libmongoc-1.0.so.0: cannot open shared object file: No such file or directory
當我評論include_directories
並取消注釋link_directories
我收到此錯誤:
fatal error: mongoc.h: No such file or directory #include <mongoc.h>
另外,出於好奇,為什么如果我將MONGO
中的pkg_search_module
名稱MONGO
像MONGODB
或MONG
這樣的東西我會收到此錯誤:
Error:None of the required 'mongoc-1.0' found
你需要告訴cmake鏈接到monog庫,這是通過
TARGET_LINK_LIBRARIES
命令,在您的特定情況下,它將在ADD_EXECUTABLE
命令之后,並且完全一樣
TARGET_LINK_LIBRARIES(sorting ${MONGO_DB_LIBRARIES})
此外,您的PKG_SEARCH_MODULE
似乎是錯誤的,它似乎應該是
PKG_SEARCH_MODULE(MONGO_DB REQUIRED libmongoc-1.0)
我能夠編譯使用的mongo示例代碼
cmake_minimum_required(VERSION 2.8)
project(sorting)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(SOURCE_FILES main.cpp)
include_directories(/usr/include/libmongoc-1.0 /usr/include/libbson-1.0)
find_library(MONGODB_LIBRARY mongoc-1.0)
find_library(BSON_LIBRARY bson-1.0)
add_executable(sorting ${SOURCE_FILES})
target_link_libraries(sorting ${MONGODB_LIBRARY} ${BSON_LIBRARY})
你能試試這個CMakeFiles.txt嗎?
BTW它存在一個用於c ++項目的mongo驅動程序c ++!
我終於能夠做到了! 我的IDE(CLION)正在覆蓋環境變量LD_LIBRARY_PATH
。 我在IDE設置中設置它指向庫目錄,現在一切正常。 這是我使用的配置:
cmake_minimum_required(VERSION 3.2)
project(sorting C)
set(ENV{PKG_CONFIG_PATH} "")
find_package(PkgConfig REQUIRED)
pkg_search_module(MONGO REQUIRED mongoc)
include_directories(${MONGO_INCLUDE_DIRS})
include_directories(${MONGO_LIBRARY_DIRS})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(SOURCE_FILES main.c)
add_executable(sorting ${SOURCE_FILES})
target_link_libraries(sorting ${MONGO_LIBRARIES} )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.