C++ 使用外部库poco生成未定义的符号

C++ 使用外部库poco生成未定义的符号,c++,macos,cmake,poco,clion,C++,Macos,Cmake,Poco,Clion,使用poco库构建项目时,我遇到以下错误: /Applications/CLion.app/Contents/bin/cmake/bin/cmake --build /Users/alan/Library/Caches/clion11/cmake/generated/12b7e3f2/12b7e3f2/Debug --target csvreader -- -j 2 [ 50%] Linking CXX executable csvreader Undefined symbols

使用poco库构建项目时,我遇到以下错误:

/Applications/CLion.app/Contents/bin/cmake/bin/cmake --build /Users/alan/Library/Caches/clion11/cmake/generated/12b7e3f2/12b7e3f2/Debug --target csvreader -- -j 2 [ 50%] Linking CXX executable csvreader Undefined symbols for architecture x86_64: "Poco::AtomicCounter::AtomicCounter(int)", referenced from: Poco::ReferenceCounter::ReferenceCounter() in dataConn.cpp.o "Poco::AtomicCounter::~AtomicCounter()", referenced from: Poco::ReferenceCounter::~ReferenceCounter() in dataConn.cpp.o ... [many more] 这将使用以下CMake生成文件:

cmake_minimum_required(VERSION 3.3) project(csvreader) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") set(SOURCE_FILES dataConn.cpp ) #set(Boost_USE_STATIC_LIBS ON) #set(Boost_DEBUG ON) set(POCO_ROOT "/Users/alan/ClionProjects/csvreader/poco-1.6.1-all") set(POCO_INCLUDE_DIR "${POCO_ROOT}/Foundation/include" "${POCO_ROOT}/Util/include" "${POCO_ROOT}/Data/include" "${POCO_ROOT}/Data/SQLite/include") set(POCO_LIBRARY_DIR ${POCO_ROOT}/lib/Darwin/x86_64) message(STATUS "[ ${POCO_ROOT} ]" " POCO_ROOT") include_directories("${POCO_INCLUDE_DIR}") set(POCO_LIBS "") set(POCO_LIB_NAMES PocoFoundationd PocoUtild libPocoDatad PocoDataSQLited ) message(STATUS "[ ${POCO_LIB_NAMES} ]" " POCO_LIB_NAMES") #FIND_LIBRARY(POCO_LIBS # NAMES ${POCO_LIB_NAMES} # PATHS ${POCO_LIBRARY_DIR} # NO_DEFAULT_PATH) #message(STATUS "[ ${POCO_LIBS} ]" " POCO_LIBS") LINK_DIRECTORIES(${POCO_LIBRARY_DIR}) add_executable(csvreader ${SOURCE_FILES} ) target_link_libraries(csvreader ${POCO_LIBRARY_DIR} ${POCO_LIBS}) 我检查了试图访问的静态库,第一个未找到的符号在库中。所以这似乎是一个CMake自己找不到库的问题。 如果相关的话,这是在OSX10.10.5上,所有的东西都是64位构建的

有人能提出解决办法吗

为了回应Robin下面的评论,我尝试取消对FIND_库的注释,并插入第一个包含符号Poco::AtomicCounter::AtomicCounter的库。见下文。尝试使用此代码进行构建会导致相同的错误,上面的符号和其他符号均未找到

cmake_minimum_required(VERSION 3.3) project(csvreader) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") set(SOURCE_FILES dataConn.cpp ) #set(Boost_USE_STATIC_LIBS ON) #set(Boost_DEBUG ON) set(POCO_ROOT "/Users/alan/ClionProjects/csvreader/poco-1.6.1-all") set(POCO_INCLUDE_DIR "${POCO_ROOT}/Foundation/include" "${POCO_ROOT}/Util/include" "${POCO_ROOT}/Data/include" "${POCO_ROOT}/Data/SQLite/include") set(POCO_LIBRARY_DIR ${POCO_ROOT}/lib/Darwin/x86_64) message(STATUS "[ ${POCO_ROOT} ]" " POCO_ROOT") include_directories("${POCO_INCLUDE_DIR}") set(POCO_LIBS "") set(POCO_LIB_NAMES PocoFoundationd PocoUtild libPocoDatad PocoDataSQLited ) set(POCO_LIB_1 PocoFoundationd) message(STATUS "[ ${POCO_LIB_NAMES} ]" " POCO_LIB_NAMES") FIND_LIBRARY(POCO_LIBS NAMES ${POCO_LIB_1} PATHS ${POCO_LIBRARY_DIR} NO_DEFAULT_PATH) message(STATUS "[ ${POCO_LIBS} ]" " POCO_LIBS") #LINK_DIRECTORIES(${POCO_LIBRARY_DIR}) add_executable(csvreader ${SOURCE_FILES} ) target_link_libraries(csvreader ${POCO_LIBRARY_DIR} ${POCO_LIBS})
如果取消对FIND_LIBRARY命令的注释,会发生什么?目前,您正在将一个目录和一个空字符串传递给目标链接库。我首先尝试了使用FIND\u LIBRARY,但它给出了相同的错误。一个FIND\u LIBRARY命令只能找到一个库。如果要搜索POCO_LIB_名称中设置的所有四个库,则需要四个不同的FIND_LIBRARY命令。请仔细检查是否有调试版本的库。默认版本库名称不带“d”后缀,例如来自自制。如果没有,请尝试将PocoFoundation更改为PocoFoundation等。