簡體   English   中英

C / C ++庫與CMake鏈接

[英]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名稱MONGOMONGODBMONG這樣的東西我會收到此錯誤:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM