首页 > 解决方案 > LIBSSH2 与 LIBCURL C++ 手动编译

问题描述

我正在开发一个单一的 C++ 应用程序,它使用 LIBCURL 通过 SFTP 协议进行一些文件传输。但是,在我的应用程序中,我总是需要手动构建 libcurl 和 libssh2 的静态库。

我制作了一个 shell 脚本来自动生成第三个库(即 LIBCURL e LIBSSH2)。我的脚本如下所示:

# Initially we shall define some important paths definitions

OPENSSL_MYAPP_RELEASE=$HOME/openssl-1.0.2o/release64/lib/
OPENSSL_MYAPP_DEBUG=$HOME/openssl-1.0.2o/debug64/lib
OPENSSL_MYAPP_INCLUDE=$HOME/openssl-1.0.2o/release64/include/
ZLIB_MYAPP_RELEASE=$HOME/zlib/linux64/release/
ZLIB_MYAPP_DEBUG=$HOME/zlib/linux64/debug/
ZLIB_MYAPP_INCLUDE=$HOME/zlib/linux32/include/
SSH2_MYAPP_RELEASE=$HOME/libssh2/build/linux64/release/
SSH2_MYAPP_DEBUG=$HOME/libssh2/build/linux64/debug/

cd $HOME/libssh2
./configure --enable-static --with-libssl-prefix=$OPENSSL_MYAPP_RELEASE \
--disable-debug --prefix=$SSH2_MYAPP_RELEASE && \
make && \
make install

cd $HOME/curl-7.30
./configure --disable-debug --enable-static --disable-shared \
--disable-ldap --without-libidn --with-zlib=$ZLIB_MYAPP_RELEASE \
--with-ssl=$OPENSSL_MYAPP_RELEASE \
--with-libssh2=$SSH2_MYAPP_RELEASE \
--prefix=$HOME/curl-7.30.0/build/linux64/release/ && \
make && \
make install

LIBSSH2 和 LIBCURL 的静态库已成功生成,但是当我通过链接生成的 LIBSSH2 和 LIBCURL 来编译我的应用程序时,我在一些重要的 LIBSSH2 方法(例如 libssh2_init())中得到了很多未定义的引用。

当我使用nm -a libcurl.a反汇编生成的 LIBCURL 时,我注意到 LIBSSH2 方法中有很多未定义的符号。

我生成的脚本可能有什么问题?链接器错误消息类似于以下内容:

easy.c:(.text+0xe8): undefined reference to `libssh2_init'
easy.c:(.text+0x10c): undefined reference to `libssh2_init'
easy.c:(.text+0x223): undefined reference to `libssh2_exit'
ssh.c:(.text+0x4ac): undefined reference to `libssh2_session_block_directions'
ssh.c:(.text+0x4fa): undefined reference to `libssh2_sftp_write'
ssh.c:(.text+0x58a): undefined reference to `libssh2_sftp_read'
ssh.c:(.text+0x5e6): undefined reference to `libssh2_channel_write_ex'
ssh.c:(.text+0x676): undefined reference to `libssh2_channel_read_ex'
ssh.c:(.text+0x960): undefined reference to `libssh2_session_set_blocking'
ssh.c:(.text+0x97a): undefined reference to `libssh2_session_handshake'
ssh.c:(.text+0x9bb): undefined reference to `libssh2_hostkey_hash'
ssh.c:(.text+0xa4e): undefined reference to `libssh2_session_hostkey'
ssh.c:(.text+0xaa9): undefined reference to `libssh2_knownhost_check'
ssh.c:(.text+0xbc5): undefined reference to `libssh2_knownhost_free'
ssh.c:(.text+0xbe5): undefined reference to `libssh2_agent_disconnect'
ssh.c:(.text+0xc05): undefined reference to `libssh2_agent_free'
ssh.c:(.text+0xc37): undefined reference to `libssh2_session_free'
ssh.c:(.text+0xe01): undefined reference to `libssh2_channel_free'
ssh.c:(.text+0xe44): undefined reference to `libssh2_session_disconnect_ex'

关于如何修复静态库生成脚本的任何想法/建议?

标签: c++libcurllibssh2

解决方案


推荐阅读