将 libssh 与静态库 (libssh.a) 链接

2024-06-29

我试图将我的程序与 libssh 静态库链接。

以下是我从 libssh 教程复制的简单代码:

//sshtest.c
#define LIBSSH_STATIC 1
#include <libssh/libssh.h>
#include <stdlib.h>

int main()
{
  ssh_session my_ssh_session;
  my_ssh_session = ssh_new();
  if (my_ssh_session == NULL)
    exit(-1);

  ssh_free(my_ssh_session);
}

我把库文件libssh.a进入子目录libs/

然后用命令编译gcc sshtest.c -Llibs -lssh -o sshtest

输出是一堆未定义的引用错误,例如:

libs/libssh.a(wrapper.c.o): In function `crypto_free':
/home/gg/libssh/src/wrapper.c:156: undefined reference to `BN_clear_free'
/home/gg/libssh/src/wrapper.c:157: undefined reference to `BN_clear_free'
libs/libssh.a(libcrypto.c.o): In function `ssh_reseed':
/home/gg/libssh/src/libcrypto.c:77: undefined reference to `RAND_add'
libs/libssh.a(libcrypto.c.o): In function `sha1_init':
/home/gg/libssh/src/libcrypto.c:84: undefined reference to `EVP_MD_CTX_new'

可以通过复制动态库文件来解决该问题(libssh.so, libssh.so.4, libssh.so.4.5.0) 进入libs/文件夹,但我想在这种情况下编译器将链接到动态库。

有人可以告诉我链接 libssh 静态库的正确方法吗?谢谢 !!

额外的东西(可选):

实际上,我试图使用 includeOS 构建一个 ssh 服务器应用程序,我尝试通过添加来链接动态库target_link_libraries进入cmakelist.txt,我得到了一个错误usr/bin/ld unrecognized option "-Wl,-rpath,path_to_my_sshlib"when I make它。我猜可能是unikernel不支持动态链接,因为includeOS在cmakelist中只有一个静态libray路径变量

- - - - - - - - - - - 编辑 - - - - - - - - - - - - - - -----

错误信息之一:

`/home/gavin/libssh/src/wrapper.c:156: undefined reference to `BN_clear_free'`

包装器.c,第 156 行:

  bignum_free(crypto->e);

它被定义在libssh/libcrypto.h其中包括wrapper.h

libcrypto.h 第 70 行:

#define bignum_free(num) BN_clear_free(num)

我注意到void BN_clear_free(BIGNUM *a);是openssl库中定义的函数

引入另一个库会导致问题吗? 如果是这样,我该如何解决它? 为什么动态链接没有这个问题?


  1. Install libssl-dev, cmake也许还有其他一些依赖关系 https://github.com/simonsj/libssh/blob/master/INSTALL如果您还没有它们。
  2. 使用静态标志从源代码构建 libssh。

    • 例如提炼libssh-0.9.3.tar.xz to /home/user/libssh-0.9.3
    • cd /home/user/libssh-0.9.3
    • mkdir build && cd build
    • cmake ../ -DWITH_EXAMPLES=OFF -DBUILD_SHARED_LIBS=OFF -DWITH_STATIC_LIB=ON
    • make
    • 现在你可以使用/home/user/libssh-0.9.3/build/src/libssh.a
  3. 编译你的代码gcc -I/home/user/libssh-0.9.3/include sshtest.c /home/user/libssh-0.9.3/build/src/libssh.a -lssh -lrt -lcrypto -lz -lpthread -ldl -o sshtest -static

  4. 你还是会得到一些warnings关于 glibc 的共享库,但生成的二进制文件是完全静态的。

大概您需要将源代码中的包含顺序更改为 1) stdlib.h、stdio.h 等,2) libssh/libssh.h。 并删除#define LIBSSH_STATIC 1

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 libssh 与静态库 (libssh.a) 链接 的相关文章

  • WPF DataGrid 在行删除后失去焦点

    我正在使用 WPF DataGrid 通过键盘 删除 键进行行删除 但是 删除该行后 DataGrid 失去焦点 并且 DataGrid SelectedIndex 1 与WinForm datagrid相比 删除一行后 焦点自动转移到下一
  • static const 和 constexpr 变量有什么区别? [复制]

    这个问题在这里已经有答案了 我明白 一个constexpr variable可以在编译时使用 对于模板 或者例如 static assert 但如果我想在没有 constexpr 的情况下做到这一点 我可以static const 自从 C
  • 如何反向遍历 C# 集合?

    是否有可能有一个foreach将以相反顺序遍历 Collections 对象的语句 如果不是foreach声明 还有其他方法吗 你可以用普通的for向后循环 如下所示 for int i collection Count 1 i gt 0
  • 提高mmap memcpy文件读取性能

    我有一个从文件中顺序读取数据的应用程序 有些是直接从指向的指针读取mmaped 文件和其他部分是memcpyed 从文件到另一个缓冲区 我注意到在进行大型操作时性能不佳memcpy我需要的所有内存 1MB 块 以及在执行大量较小操作时的更好
  • 在运行时更改语言的正确方法

    在运行时更改表单语言的正确方法是什么 使用递归手动设置所有控件 例如this https stackoverflow com questions 7556367 how do i change the culture of a winfor
  • 实体框架 - 将枚举的 ICollection 保存在数据库中

    我有一个具有 type 属性的类ICollection
  • 使用自定义源增强 Iostreams zlib_error

    我正在尝试使用zlib decompressor通过一个解压缩数据istreambuf iterator 我找不到使用输入迭代器作为流的输入的内置方法 如果已经存在 请指出一种方法 所以我写了这个源代码 template
  • 从 ASP.NET 插入到 MS Access

    我们正在尝试建立一个专门用于内联网的服务台票务系统 决定使用 Visual Studio 2008 Express 的 ASP NET C 如果需要的话 我们有一个完整版本 没什么花哨的 几页抓取 NTLM 信息 系统信息并将其与问题一起存
  • 如何将字典中从一个键到下一个键的所有值相加? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个字典 其中 DateTime Now Date 转换为字符串作为键 整数作为值 我需要以某种方式将从一个输入键到下一个键的所有
  • 如何更改 gdb 中的值

    所以我有这个家庭作业代码 我必须使用 gdb 进行调试 我发现了问题 但不知道如何使用gdb来改变它 define ARRAYSIZE 12 for i ARRAYSIZE 2 i gt 0 i for j i j lt ARRAYSIZE
  • 可以取消链接以读写方式打开的文件

    在我的程序 在 Mac OS X 上 中 我使用以下代码打开该文件 int fd fd open filename O RDWR 删除文件的程序如下 unlink filename 就我而言 我有相同的文件被打开和删除 我观察到以下情况 打
  • 可变参数模板中的可变参数模板推导

    我不确定标题是否有意义 但这个例子实际上非常简单 A converter struct with a generic constructor template
  • 动态方法的实际例子?

    我想学习动态方法及其使用 C 的实际示例 动态方法和Reflection有什么关系吗 请帮我 我们正在使用动态方法来加速反射 这是我们的反射优化器的代码 只比直接调用慢10 比反射调用快2000倍 public class Reflecti
  • C# CsvHelper.ValidationException - 为什么?

    我正在尝试在 C 控制台应用程序中使用 CSVHelper 我有一个例外 CsvHelper ValidationException 标头匹配 Numer Dokumentu 未找到索引 0 处的名称 我不知道为什么 因为这个标题位于 cs
  • 如何在网络浏览器中打开 Excel?

    单击按钮时我需要在网络浏览器中打开 Excel 如何在 asp net 中执行此操作 您无法在客户端 浏览器 计算机上控制和启动软件 为什么 安全 如果这是可能的话 黑客早就接管了所有计算机 你能解释一下吗exactly你想做什么 如果您解
  • 将 double 转换为 float 后值不正确

    我有一些由 gcc gcc GCC 4 4 4 20100726 Red Hat 4 4 4 13 编译的执行高精度算术的 C 代码 计算的最终结果是一个 double 值 其值为 622 07999995861189 我是将双精度型转换为
  • C#:迭代数据表:Rows、Select() 或 AsEnumerable()

    foreach DataRow row in myDataTable Select foreach DataRow row in myDataTable AsEnumerable foreach DataRow row in myDataT
  • Microsoft.IdentityModel.Clients.ActiveDirectory.UserCredential 不采用 2 个参数?

    我在代码中使用 ADAL 我想要使 用的一件事是使用不同的凭据 因此我可以在控制台程序中针对 Azure AD 授权不同的用户 Microsoft IdentityModel Clients ActiveDirectory UserCred
  • C# 中线程之间发送消息

    如何在线程之间发送和接收消息 例如 一种解决方案是共享并发队列 尽管它的名称 并发队列 http msdn microsoft com en us library dd267265 aspx 这将允许您将一个对象从一个线程入队 并让另一个线
  • 选择数据结构

    根据需求使用不同的数据结构 但我如何知道应该使用哪种数据结构 我只是想知道如何选择合适的数据结构 谢谢 此流程图适用于 C 中的 STL 但您可以用 C 实现 STL 容器支持的任何数据结构 列表是一个链接列表 Vector是一个动态数组

随机推荐

  • 如何在 Angular 中按 ID 显示博客详细信息

    我想在 Angular 中通过 ID 显示博客详细信息 为此 当您单击博客主页上的按钮时 应用程序会将您带到博客详细信息页面 即 pagina component html 文件 我实现了在此处显示所有博客 但我真正想要的是显示一个独特的博
  • 数据库中无法识别的数据类型 nvarchar

    我尝试将 MySQL 服务器数据导入 PHPMyAdmin MySQL 数据库 无法识别的数据类型 nvarchar 发现 我的数据库排序规则设置为 utf general ci 您不必担心 nvarchar 消息 它是由 phpmyadm
  • 在 MATLAB 中矢量图形导出期间位图渲染绘图的一部分

    我有一个非常复杂的函数 我用它来绘制fsurf具有相当高的MeshDensity 我不能比默认值低太多 即 35 导出该图 saveas gcf file pdf pdf 会生成一个 20MB 的 pdf 文件 质量非常好 但渲染速度非常慢
  • 在ggplot2中设置base_size时重叠轴标签

    我正在改变base size via theme set 当我在屏幕上查看结果图时 它看起来很棒 但是 当我将其另存为 pdf 时 x 轴标签有点太接近轴编号 一件小事 theme set theme bw base size 9 不会造成
  • 如何更改 uib-tabset 中每个选项卡的路由

    当我选择一个选项卡时 我希望更改 url 我应该为每个选项卡创建一个状态吗 这是我的代码 无需更改状态即可正常工作 我的应用程序 js var myApp angular module app ui router ngAnimate ui
  • 有没有办法检查 iOS 设备是否锁定/解锁?

    我在我的应用程序中使用了 GPS 位置更新 我想检测 iOS 设备是否处于睡眠模式 以便我可以关闭 GPS 位置更新并优化电池使用 我已经在iOS 6中尝试过pausesLocationupdates 但它无法按预期工作 我想在设备进入睡眠
  • Kafka 消费者无法读取所有可用分区

    我们注意到我们的产品主题之一 6 个分区 存在一个奇怪的问题 其中我们的消费者 dotnet core 只有 1 个实例 只能从 3 个分区 0 1 3 读取 这显然会影响应用程序行为 因为消费者丢失了来自其他 3 个分区 2 4 5 的消
  • 使用 Gradle 构建未签名的 APK

    目前我正在尝试学习 Gradle 来构建 Android APK 如何在 gradle 中设置选项来构建未签名的 APK 您不必设置任何选项 只需运行常规任务即可 gradle assemble 这将在project build apk 中
  • Gitlab CI - 如果缓存存在,如何跳过作业

    我有一个setup我的 CI 中的作业安装了所有 npm 包并将它们存储在缓存中 setup stage pre build cache untracked true when on success key files repo hash
  • Teradata 中变量的声明

    在 teradata 的 sql 方言中是否有与声明类似于此 Sql Server TSQL 代码的变量等效的操作 DECLARE Somedate Date GETUTCDATE SELECT TOP 10 FROM SOMETABLE
  • 带有智能指针的虚拟构造函数习惯用法

    我有一个多态类的层次结构 比如说Shape抽象基类及其派生类 例如Rectangle Circle等 虚拟构造函数习语 http www parashift com c faq lite virtual functions html faq
  • 更改输入上的父 div [type=checkbox]:使用 css 检查[重复]

    这个问题在这里已经有答案了 我可以弄清楚如何在选中复选框时更改父 div 更改以下段落效果很好 在 Chrome 中尝试过这种方法但没有运气 HTML div div
  • 使用休眠截断所有表的最佳方法?

    我想截断一个集成测试与另一个集成测试之间的所有数据库表 使用休眠来执行此操作的最佳方法是什么 目前我正在这样做 public void cleanDatabase doWithSession new Action1
  • PyTorch 训练和验证步骤中的无限循环

    Dataset 和 DataLoader 的部分没问题 我从我构建的另一个代码中回收了 但在我的代码中该部分出现了无限循环 def train train loader MLP epoch criterion optimizer MLP t
  • 从在线签入 TFS 中排除文件夹

    我正在使用 Visualstudio com 作为在线 TFS 并在那里创建了我的代码存储库 在我的项目中 有一个包含多个子文件夹的文件夹 每个子文件夹都有几个图像 所有图像的总数约为 6000 个 当我签入代码时 我不希望签入根文件夹 即
  • 延迟作业排除队列

    我有一个延迟的作业队列 其中包含运行速度特别慢的任务 我希望由自己的一组专用工作人员来处理这些任务 因此它会阻碍其余工作人员管道的风险较小 RAILS ENV production script delayed job queue supe
  • Qt: 主窗口->show();不显示主窗口

    在下面的代码中 我创建一个窗口 调用window show 但窗口直到之后才显示window gt iterateSolution 叫做 几乎就好像 app exec 是显示窗口的函数 我对 Qt 很陌生 所以我不知道发生了什么 inclu
  • Angular 2 TypeError:无法读取 null 的属性“animate”

    我正在使用 Chrome 51 和 Angular 2 rc4 并在加载我的 Angular 应用程序时在控制台中弹出以下错误 TypeError Cannot read property animate of null at e supp
  • PHPExcel - 如何使用 preg_replace 替换文本

    我正在使用 PHPExcel 将数据库中的数据提取到组织好的 Excel 工作表中 除了一件事之外 一切都运转良好 我的数据库条目有时可能包含 HTML 标记 例如 strong strong br p p 等等 所以我设法让这个 PHP
  • 将 libssh 与静态库 (libssh.a) 链接

    我试图将我的程序与 libssh 静态库链接 以下是我从 libssh 教程复制的简单代码 sshtest c define LIBSSH STATIC 1 include