Я новичок в cmake и пытаюсь скомпилировать мой код на c ++ с помощью cmake, чтобы позже работать с моей локальной базой данных MongoDB . Сборка файлов работает, но когда дело доходит до связывания, я получаю ошибку от collect2: "error: ld returned 1 exit status"
(обычно показывает ошибку над строкой). Я действительно думаю, что проблема в моем файле CMakeLists.txt, не знаю, что я пропустил или сделал неправильно.
CMakeLists.txt
cmake_minimum_required(VERSION 3.0)
project(documentations)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")
include_directories("/usr/local/include/libmongoc-1.0")
include_directories("/usr/local/include/libbson-1.0")
include_directories("/usr/local/include/pistache")
find_library(MONGODB_LIBRARY mongoc-1.0)
find_library(BSON_LIBRARY bson-1.0)
find_library(PISTACHE_LIBRARY pistache)
add_executable(
documentations
myendpoint.cpp
insert_doc.cpp
find_doc.cpp
)
target_link_libraries(documentations ${MONGODB_LIBRARY} ${BSON_LIBRARY} ${PISTACHE_LIBRARY})
При использовании make в терминале
tolga@tolga-VirtualBox:~/documentations$ make
Scanning dependencies of target documentations
[ 25%] Building CXX object CMakeFiles/documentations.dir/myendpoint.cpp.o
[ 50%] Building CXX object CMakeFiles/documentations.dir/insert_doc.cpp.o
[ 75%] Building CXX object CMakeFiles/documentations.dir/find_doc.cpp.o
[100%] Linking CXX executable documentations
CMakeFiles/documentations.dir/insert_doc.cpp.o: In function `insert_doc(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, long, unsigned long, double, std::allocator, nlohmann::adl_serializer>)':
insert_doc.cpp:(.text+0x0): multiple definition of `insert_doc(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, long, unsigned long, double, std::allocator, nlohmann::adl_serializer>)'
CMakeFiles/documentations.dir/myendpoint.cpp.o:myendpoint.cpp:(.text+0x1613): first defined here
CMakeFiles/documentations.dir/find_doc.cpp.o: In function `find_doc(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)':
find_doc.cpp:(.text+0x29): multiple definition of `find_doc(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
CMakeFiles/documentations.dir/myendpoint.cpp.o:myendpoint.cpp:(.text+0x1a8): first defined here
CMakeFiles/documentations.dir/find_doc.cpp.o: In function `find_doc_where(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)':
find_doc.cpp:(.text+0x208): multiple definition of `find_doc_where(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
CMakeFiles/documentations.dir/myendpoint.cpp.o:myendpoint.cpp:(.text+0x387): first defined here
CMakeFiles/documentations.dir/find_doc.cpp.o: In function `find_doc_where_single_field(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)':
find_doc.cpp:(.text+0x478): multiple definition of `find_doc_where_single_field(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
CMakeFiles/documentations.dir/myendpoint.cpp.o:myendpoint.cpp:(.text+0x5f7): first defined here
CMakeFiles/documentations.dir/find_doc.cpp.o: In function `find_doc_multiple_filters(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >)':
find_doc.cpp:(.text+0x74b): multiple definition of `find_doc_multiple_filters(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >)'
CMakeFiles/documentations.dir/myendpoint.cpp.o:myendpoint.cpp:(.text+0x8ca): first defined here
CMakeFiles/documentations.dir/find_doc.cpp.o: In function `find_doc_where_oid(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)':
find_doc.cpp:(.text+0xa7c): multiple definition of `find_doc_where_oid(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
CMakeFiles/documentations.dir/myendpoint.cpp.o:myendpoint.cpp:(.text+0xbfb): first defined here
CMakeFiles/documentations.dir/find_doc.cpp.o: In function `find_doc_offset(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, int)':
find_doc.cpp:(.text+0xcda): multiple definition of `find_doc_offset(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, int)'
CMakeFiles/documentations.dir/myendpoint.cpp.o:myendpoint.cpp:(.text+0xe59): first defined here
CMakeFiles/documentations.dir/find_doc.cpp.o: In function `find_doc_after_time(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int)':
find_doc.cpp:(.text+0xf4a): multiple definition of `find_doc_after_time(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int)'
CMakeFiles/documentations.dir/myendpoint.cpp.o:myendpoint.cpp:(.text+0x10c9): first defined here
CMakeFiles/documentations.dir/find_doc.cpp.o: In function `find_doc_between_time(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, int)':
find_doc.cpp:(.text+0x1195): multiple definition of `find_doc_between_time(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, int)'
CMakeFiles/documentations.dir/myendpoint.cpp.o:myendpoint.cpp:(.text+0x1314): first defined here
collect2: error: ld returned 1 exit status
CMakeFiles/documentations.dir/build.make:149: recipe for target 'documentations' failed
make[2]: *** [documentations] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/documentations.dir/all' failed
make[1]: *** [CMakeFiles/documentations.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2
tolga@tolga-VirtualBox:~/documentations$