Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Curl 使用CMake链接静态卷曲时出错_Curl_Cmake - Fatal编程技术网

Curl 使用CMake链接静态卷曲时出错

Curl 使用CMake链接静态卷曲时出错,curl,cmake,Curl,Cmake,我正在尝试构建使用cURL库的示例程序。不幸的是,我在链接过程中有很多错误 系统:Linux-x86_64,GCC版本7.2.2 1) 由于需要SSL支持,我首先构建了OpenSSL库。我下载了openssl-1.1.1-pre5.tar.gz,解包并将其配置为静态构建: $ ./Configure --prefix="${HOME}/Source/openssl-1.1.1-pre5" no-shared linux-x86_64 然后 2) 接下来,我准备了ZLib库:下载ZLib-1.2

我正在尝试构建使用cURL库的示例程序。不幸的是,我在链接过程中有很多错误

系统:Linux-x86_64,GCC版本7.2.2

1) 由于需要SSL支持,我首先构建了OpenSSL库。我下载了openssl-1.1.1-pre5.tar.gz,解包并将其配置为静态构建:

$ ./Configure --prefix="${HOME}/Source/openssl-1.1.1-pre5" no-shared linux-x86_64
然后

2) 接下来,我准备了ZLib库:下载ZLib-1.2.11.tar.gz,解包并将其配置为静态构建:

$ ./configure --prefix="${HOME}/Source/zlib-1.2.11" --static
然后

3) 然后我构建了cURL,也作为静态库:

$ ./configure --prefix="${HOME}/Source/curl-7.59.0" --with-ssl="${HOME}/Source/openssl-1.1.1-pre5" --with-zlib="${HOME}/Source/zlib-1.2.11" --enable-static --disable-shared
。。。 配置概要:

  curl version:     7.59.0
  Host setup:       x86_64-pc-linux-gnu
  Install prefix:   /home/sergei/Source/curl-7.59.0
  Compiler:         gcc
  SSL support:      enabled (OpenSSL)
  SSH support:      no      (--with-libssh2)
  zlib support:     enabled
  brotli support:   no      (--with-brotli)
  GSS-API support:  no      (--with-gssapi)
  TLS-SRP support:  enabled
  resolver:         POSIX threaded
  IPv6 support:     enabled
  Unix sockets support: enabled
  IDN support:      no      (--with-{libidn2,winidn})
  Build libcurl:    Shared=no, Static=yes
  Built-in manual:  enabled
  --libcurl option: enabled (--disable-libcurl-option)
  Verbose errors:   enabled (--disable-verbose)
  SSPI support:     no      (--enable-sspi)
  ca cert bundle:   /etc/ssl/certs/ca-certificates.crt
  ca cert path:     no
  ca fallback:      no
  LDAP support:     no      (--enable-ldap / --with-ldap-lib / --with-lber-lib)
  LDAPS support:    no      (--enable-ldaps)
  RTSP support:     enabled
  RTMP support:     no      (--with-librtmp)
  metalink support: no      (--with-libmetalink)
  PSL support:      no      (libpsl not found)
  HTTP2 support:    disabled (--with-nghttp2)
  Protocols:        DICT FILE FTP FTPS GOPHER HTTP HTTPS IMAP IMAPS POP3 POP3S RTSP SMB SMBS SMTP SMTPS TELNET TFTP
然后

构建完成后,我在${HOME}/Source/cURL-7.59.0中得到了cURL-dir结构:

/bin
/include
/lib    <-- here are libcurl.a and libcurl.la 
/share
当我尝试构建时,我遇到了很多错误(在“[100%]链接CXX可执行文件main”行之后),如下所示:

/home/sergei/Source/curl-7.59.0/lib/libcurl.a(libcurl_la-version.o): In function `curl_version.part.0':
version.c:(.text+0x68): undefined reference to `zlibVersion'
/home/sergei/Source/curl-7.59.0/lib/libcurl.a(libcurl_la-version.o): In function `curl_version_info.part.1':
version.c:(.text+0xde): undefined reference to `zlibVersion'
/home/sergei/Source/curl-7.59.0/lib/libcurl.a(libcurl_la-content_encoding.o): In function `gzip_init_writer':
content_encoding.c:(.text+0x230): undefined reference to `zlibVersion'
content_encoding.c:(.text+0x266): undefined reference to `inflateInit2_'
content_encoding.c:(.text+0x289): undefined reference to `inflateInit2_'
/home/sergei/Source/curl-7.59.0/lib/libcurl.a(libcurl_la-content_encoding.o): In function `exit_zlib':
content_encoding.c:(.text+0x31c): undefined reference to `inflateEnd'
/home/sergei/Source/curl-7.59.0/lib/libcurl.a(libcurl_la-content_encoding.o): In function `inflate_stream':
content_encoding.c:(.text+0x435): undefined reference to `inflate'
content_encoding.c:(.text+0x4eb): undefined reference to `inflateEnd'
content_encoding.c:(.text+0x504): undefined reference to `inflateInit2_'
openssl.c:(.text+0x4ae): undefined reference to `SSL_get_error'
openssl.c:(.text+0x4c3): undefined reference to `ERR_get_error'
openssl.c:(.text+0x553): undefined reference to `ERR_error_string_n'
/home/sergei/Source/curl-7.59.0/lib/libcurl.a(libcurl_la-openssl.o): In function `ssl_ui_writer':
openssl.c:(.text+0x8e0): undefined reference to `UI_get_string_type'
openssl.c:(.text+0x8f0): undefined reference to `UI_get0_user_data'
openssl.c:(.text+0x8fd): undefined reference to `UI_get_input_flags'
openssl.c:(.text+0x906): undefined reference to `UI_OpenSSL'
openssl.c:(.text+0x90e): undefined reference to `UI_method_get_writer'
就像这样:

/home/sergei/Source/curl-7.59.0/lib/libcurl.a(libcurl_la-version.o): In function `curl_version.part.0':
version.c:(.text+0x68): undefined reference to `zlibVersion'
/home/sergei/Source/curl-7.59.0/lib/libcurl.a(libcurl_la-version.o): In function `curl_version_info.part.1':
version.c:(.text+0xde): undefined reference to `zlibVersion'
/home/sergei/Source/curl-7.59.0/lib/libcurl.a(libcurl_la-content_encoding.o): In function `gzip_init_writer':
content_encoding.c:(.text+0x230): undefined reference to `zlibVersion'
content_encoding.c:(.text+0x266): undefined reference to `inflateInit2_'
content_encoding.c:(.text+0x289): undefined reference to `inflateInit2_'
/home/sergei/Source/curl-7.59.0/lib/libcurl.a(libcurl_la-content_encoding.o): In function `exit_zlib':
content_encoding.c:(.text+0x31c): undefined reference to `inflateEnd'
/home/sergei/Source/curl-7.59.0/lib/libcurl.a(libcurl_la-content_encoding.o): In function `inflate_stream':
content_encoding.c:(.text+0x435): undefined reference to `inflate'
content_encoding.c:(.text+0x4eb): undefined reference to `inflateEnd'
content_encoding.c:(.text+0x504): undefined reference to `inflateInit2_'
openssl.c:(.text+0x4ae): undefined reference to `SSL_get_error'
openssl.c:(.text+0x4c3): undefined reference to `ERR_get_error'
openssl.c:(.text+0x553): undefined reference to `ERR_error_string_n'
/home/sergei/Source/curl-7.59.0/lib/libcurl.a(libcurl_la-openssl.o): In function `ssl_ui_writer':
openssl.c:(.text+0x8e0): undefined reference to `UI_get_string_type'
openssl.c:(.text+0x8f0): undefined reference to `UI_get0_user_data'
openssl.c:(.text+0x8fd): undefined reference to `UI_get_input_flags'
openssl.c:(.text+0x906): undefined reference to `UI_OpenSSL'
openssl.c:(.text+0x90e): undefined reference to `UI_method_get_writer'
你能帮帮我吗:我做错了什么

注意:在CMakeLists.txt中添加行“add_definitions(-DCURL_STATICLIB)”无效


谢谢。

在CMakelists.txt中添加一行:

link_libraries(z)

ref:

您是否尝试使用、设置
-DCMAKE\u PREFIX\u PATH
-DCURL\u DIR
适当?最小的CMakeLists.txt是这样的:与共享库不同,静态库不包含工作所需的库列表。因此,您需要手动链接CURL使用的每个库。我只能使用find_package()来查找OpenSSL静态库(我以前构建过),并且该函数运行良好:找到libssl.a、libcrypto.a和“include”dir。对于ZLib和cURL,find_package()只从“/usr/…”linux目录中查找共享库。我还尝试使用与cURL相同的方法链接OpenSSL和ZLib:添加_library(),设置_target_属性(),包括_目录(),然后将它们全部添加到目标_link_库(主ZLib_库OpenSSL_library cURL_库)。不幸的是,它不允许我构建示例程序。你有没有其他想法,如何编写正确的CMakeLists.txt??
openssl.c:(.text+0x4ae): undefined reference to `SSL_get_error'
openssl.c:(.text+0x4c3): undefined reference to `ERR_get_error'
openssl.c:(.text+0x553): undefined reference to `ERR_error_string_n'
/home/sergei/Source/curl-7.59.0/lib/libcurl.a(libcurl_la-openssl.o): In function `ssl_ui_writer':
openssl.c:(.text+0x8e0): undefined reference to `UI_get_string_type'
openssl.c:(.text+0x8f0): undefined reference to `UI_get0_user_data'
openssl.c:(.text+0x8fd): undefined reference to `UI_get_input_flags'
openssl.c:(.text+0x906): undefined reference to `UI_OpenSSL'
openssl.c:(.text+0x90e): undefined reference to `UI_method_get_writer'
link_libraries(z)