[英]C++ adding static library to CMake project results in undefined references
[英]Adding CURL as static library to a C++ CMake project
我將CURL庫添加到CMake項目時遇到問題。 在我的CMakeList.txt中,有以下幾行用於添加CURL:
#option(CURL_STATICLIB "Set to ON to build libcurl with static linking." ON)
if(WIN32)
add_definitions("-DCURL_STATICLIB")
endif()
option(LIBCURL_ENABLE "Enable or disable the requirement of libcurl" ON)
if(LIBCURL_ENABLE)
find_path(LCURL_INCLUDE_DIR
NAMES
curl.h
PATHS
/usr/include/curl
ENV "PROGRAMFILES(X86)"
ENV "LIBCURL_ROOT"
PATH_SUFFIXES
include)
find_library(LCURL
NAMES
libcurl.a
libcurl.lib
PATHS
/usr/lib/x86_64-linux-gnu
/usr
PATH_SUFFIXES
lib
lib/x86_64-linux-gnu)
if(LCURL STREQUAL "LCURL-NOTFOUND")
message(FATAL_ERROR "libcurl NOT found: use `-DLIBCURL_ENABLE=OFF` to build without libcurl support")
else()
set(LIBS ${LIBS} ${LCURL})
include_directories(AFTER ${LCURL_INCLUDE_DIR})
endif()
else()
add_definitions("-DCONF_NO_LIBCURL")
endif()
...
if(LIBCURL_ENABLE)
target_link_libraries(app ${ZLIB_LIBRARIES} ${LCURL})
endif()
在Windows上一切正常。 但是在Linux上,我從make install
命令得到了以下消息:
/usr/bin/ld: /usr/lib/x86_64-linux-gnu/libcurl.a(libcurl_la-content_encoding.o): undefined reference to symbol 'inflateInit2_'
/usr/lib/x86_64-linux-gnu/libz.so: error adding symbols: DSO missing from command line
通過以下替換解決了該匯編。
#option(CURL_STATICLIB "Set to ON to build libcurl with static linking." ON)
if(WIN32)
add_definitions("-DCURL_STATICLIB")
endif()
set(CURL_LIBRARY "-lcurl")
find_package(CURL REQUIRED)
include_directories(${CURL_INCLUDE_DIR})
if(LIBCURL_ENABLE)
target_link_libraries(app ${CURL_LIBRARIES})
endif()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.