c++ - 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'
关于如何修复静态库生成脚本的任何想法/建议?
解决方案
推荐阅读
- android - 通过物理设备运行时,Glide 不会显示来自 Firebase 的图像
- javascript - 如何从同一个代码库自动构建两个相关的应用程序?
- jquery - 始终在其正常固定位置打开可拖动的 Bootstrap 模态
- pandas - 使用具有“年”和“月”信息的两个独立系列构建热图
- postgresql - 还原备份时,pg_restore 连接到数据库失败错误
- javascript - 尝试创建字符串数组以在解构函数中使用以删除对象属性,只有单个字符串值有效
- ios - UIAlertController 不适用于 Rx-Single
- tensorflow - Tensorflow:tflite 文件是否包含有关模型架构的数据?(图形?)
- r - 绘制排名数据
- android - 有没有办法将 Flow 传递给 Room DAO Query 方法?