如何在 C 中链接共享对象?

2024-04-04

我制作了一个使用共享对象的简单程序,用以下命令打开它dlopen()。我还编译并链接了共享对象,如下所示:

gcc -o libmylib.so libmylib.c -shared -fPIC -Wall

gcc -o program program.c -L. -lmylib -ldl -Wall

当我第一次尝试运行该程序时,它说了类似的话

cannot open libmylib.so: no such file or directory

所以我在互联网上搜索,发现我必须将我的共享对象复制到/lib/i386-linux-gnu/为了让程序运行。所以我这样做了,它起作用了,但后来我尝试以其他方式做到这一点,因此我删除了libmylib.so来自/lib/i3686-linux-gnu/目录。现在,当我尝试运行该程序时,它没有显示任何错误,但一直说Segmentation fault。很明显,共享对象无处可寻,但是如何在不复制任何内容的情况下链接它呢?

我使用的是Ubuntu 11.10


阅读更多关于共享库 http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html和他们的搜索路径 http://www.eyrie.org/~eagle/notes/rpath.html,以及ld http://linux.about.com/library/cmd/blcmdl1_ld.htm命令。

另一种方法是注册用于搜索库的“运行时”路径。你可以使用gcc -Wl,-rpath . -o program program.c -L. -lmylib -ldl -Wall

如果你的程序是dlopen http://linux.die.net/man/3/dlopen- 在运行时一些*.so文件,你最好将绝对文件名传递给dlopen(或者类似的东西"./foo.so"). The realpath http://linux.die.net/man/3/realpath函数可以帮助你。

甚至还有一个命令chrpath http://linux.die.net/man/1/chrpath(我刚刚发现)用于现有的可执行文件来更改其运行路径。

有安全原因(类似于PATH)以避免将当前目录放入运行时路径或LD_LIBRARY_PATH.

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

如何在 C 中链接共享对象? 的相关文章

  • C 中的 N 依赖注入 - 比链接器定义的数组更好的方法?

    Given a 库模块 在下文中称为Runner 它作为可重复使用的组件 无需重新编译 即静态链接库 中应用程序分区架构的 而不是主分区 请注意 它仅包含main 出于演示目的 Given a set 顺序无关 调用的其他模块 对象Call
  • 如何获取 linux 实用程序 tail 的源代码?

    这个命令确实非常有用 但是我可以在哪里获取源代码以查看内部发生的情况 thanks tail 实用程序是 Linux 上 coreutils 的一部分 源压缩包 ftp ftp gnu org gnu coreutils coreutils
  • 如何使用AWK脚本检查表的所有列数据类型? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 在这里 我正在检查表中第一列的数据类型 但我想知道AWK中表的所有列数据类型 我尝试过 但只能获得一列数据类型 例如 Column 1
  • git在Windows和Linux之间切换后强制刷新索引

    我有一个Windows和Linux共享的磁盘分区 格式 NTFS 它包含一个 git 存储库 约 6 7 GB 如果我只使用Windows or 只使用Linux操作 git 存储库一切正常 但是每次切换系统的时候git status命令将
  • Linux 中热插拔设备时检测设备是否存在

    我正在运行 SPIcode http lxr free electrons com source drivers spi spi omap2 mcspi c在熊猫板上 我想知道其中的哪个功能code http lxr free electr
  • 为 Qt 应用程序创建 Linux 安装

    我刚刚用 Qt Creator 制作了一个很棒的程序 我对自己很满意 如何将其从台式机移至笔记本电脑 那么 最好的方法是安装程序 对吗 对于 Ubuntu 这是一个 Debian 软件包 对吗 我怎么做 有人这样做过吗 他们可以分享 QT
  • 在Linux中断上下文中运行用户线程

    我正在编写一些定制的应用程序 并允许更改 Linux 内核中的中断处理程序代码 我有一个用户线程正在等待中断发生 如果发生中断 那么我要做的第一件事就是执行该用户线程 有什么办法让它发挥作用吗 Thanks 创建一个字符设备 这就是内核所做
  • 这个反斜杠在这段汇编代码中起什么作用?

    我不确定这些推线有什么区别 修剪下来来自 Linux 的 x86 entry calling h https github com torvalds linux blob 241e39004581475b2802cd63c111fec43b
  • 从多线程程序中调用 system()

    我们正在开发一个用 C 编写的多线程内存消耗应用程序 我们必须执行大量的 shellscript linux 命令 并获取返回码 读完之后article http www linuxprogrammingblog com threads a
  • 无需 cron 在后台发送邮件

    我想知道是否有一种方法可以运行 PHP 循环 以便在后台向订阅者发送几百封电子邮件 我的目标是格式化新闻通讯 单击发送 然后关闭浏览器或更改页面 当然 发送电子邮件的实际过程将在后台运行 不会因浏览器关闭而中断 我知道这可以通过 cron
  • Docker:处理 tar 文件时出错(退出状态 1):设置枢轴目录时出错:不是目录

    我是 Docker 新手 不知道是什么原因导致此错误或如何诊断它 任何有关此问题的具体帮助或有关首先检查何处以诊断此类问题的提示将不胜感激 我的 Dockerfile FROM java 8 Install maven RUN apt ge
  • 让 MongoDB 在 Linux 上监听远程连接

    我已在 Windows 本地计算机上 上成功安装 MongoDB 作为服务 但现在我想将 MongoDb 移动到单独的服务器 所以我将 tarball 解压到网络上的虚拟服务器 运行 Linux 当我从本地计算机使用 PuTTY 连接到服务
  • 如何在Android studio中调用.so库上的方法

    编辑 请参阅我的第一个答案 我想在我的项目中使用 android 串口 api 我这样做有很多麻烦 关于如何配置旧版本的 gradle 或如何使用 NDK 进行编译 存在大量相互冲突的信息 而这两者都没有用 我完全迷失了 我发现唯一可能正确
  • 归档文件系统或格式

    我正在寻找一种文件类型来存储已退役系统的档案 目前 我们主要使用 tar gz 但从 200GB tar gz 存档中查找并提取几个文件是很麻烦的 因为 tar gz 不支持任何类型的随机访问读取规定 在你明白之前 使用 FUSE 安装 t
  • 使用 Turbo C 编译并链接到 .com 文件

    我正在尝试使用 Turbo C 编译器和链接器编译一个简单的程序并将其链接到 DOS com 文件 我尝试了我能想到的最简单的 C 程序 void main Turbo C 链接器中是否有链接到 com 文件的命令行参数 我从链接器收到的错
  • 在主目录中安装库

    在 Linux Ubuntu 中 我尝试运行一个工具 但它显示错误 库丢失 我无权在系统中安装任何内容 或者根本无法从我的用户帐户执行 sudo 是否可以在我的主目录 没有 sudo 中安装缺少的库 在我的例子中为 libstdc so 6
  • SONAR - 使用 Cobertura 测量代码覆盖率

    我正在使用声纳来测量代码质量 我不知道的一件事是使用 Cobertura 测量代码覆盖率的步骤 我按照以下步骤操作http cobertura sourceforge net anttaskreference html http cober
  • 是否有相当于 Clang/LLVM 的 .spec 文件,在哪里可以找到参考?

    The gcc驱动程序可以配置为使用特定的链接器 特定的选项和其他细节 例如覆盖系统头 specs files 当前 截至撰写本文时 GCC 版本 4 9 0 的手册此处描述了规范文件 https gcc gnu org onlinedoc
  • 如何更改 Ubuntu 14.04 上的 php-cli 版本?

    我是 Linux 新手 在篡改时破坏了一些 php 设置 如果我执行一个包含以下内容的 php 脚本 phpinfo 它显示 php 版本为 5 6 但通过命令行 如果我运行php v它返回 7 0 版本 我想让两个版本匹配 我怎样才能修复
  • QFileDialog::getSaveFileName 和默认的 selectedFilter

    我有 getSaveFileName 和一些过滤器 我希望当用户打开 保存 对话框时选择其中之一 Qt 文档说明如下 可以通过将 selectedFilter 设置为所需的值来选择默认过滤器 我尝试以下变体 QString selFilte

随机推荐

  • Java 中的 Thread.Sleep 替代方案

    有人告诉我使用Thread Sleep 有时 人们希望在同步方法的操作循环中设置一些时间间隔 这是一个糟糕的解决方案 另一方面 我有两个不同的线程 它们在程序运行期间处于活动状态 还有一个共享对象 当我在该共享对象中使用 Object wa
  • 是否有像 pygccxml 一样的 Python Clang 包装器来包装 GCC-XML?

    很长一段时间以来 我一直在使用 pygccxml 来解析和内省我的 C 源代码 它帮助我在构建过程中进行一些巧妙的代码生成 最近我读了很多关于 LLVM 堆栈的好处 特别是 LLVM Clang 解析器给 C 编译带来的好处 我现在想知道
  • 如何在 Debian 上升级 glibc?

    我听说我可以使用apt get install libc6 但我需要向 etc apt sources list 添加一些内容才能接收最新的 glibc 版本 我应该怎么办 我能够安装libc6 2 17 in Debian Wheezy通
  • 3D饼图:图例太大

    传说的问题太大了 当我改变cex的数量时 字体太小 盒子仍然很大 希望盒子和测试可以搭配 不会太小也不会太大 table lt data frame num c 90 26 28 39 98 countries c India Sri La
  • Parse.com:如何为 Fragment 内的 Parse ListView 添加搜索过滤器

    我正在尝试为选项卡片段内的 ListView 添加搜索过滤器 使用适配器从解析服务器调用数据 我的片段java文件如下 跑车 java import android os Bundle import android text Editabl
  • 如何使 Hibernate @Lock 注释适用于 Oracle DB?

    我偶然发现 Oracle DB 中锁定行的问题 锁的目的是防止多个事务从数据库读取数据 因为这些数据会影响新数据的生成 并且会在事务中发生更改 为了进行锁定 我将 Lock 注释放在 SpringData find 方法上 该方法检索参与事
  • std::vector 中的每个元素访问都是缓存未命中吗?

    据了解std vector将其数据保存在堆上 因此向量本身的实例和第一个元素具有不同的地址 另一方面 std array是原始数组的轻量级包装 其地址等于第一个元素的地址 假设集合的大小足以容纳一个缓存行int32 在我的具有 384kB
  • 在 WebBrowser 控件中检测滚动到底部

    我正在创建一个 Windows 窗体来接受公司的一些条款和条件 因此 条款和条件位于 Web 上 并通过 WebBrowser 控件导航到 WinForm 仅当完整文档滚动到底部后才需要启用 接受 按钮 我正在寻找类似于 VScrollBa
  • 在 Windows Vista/7 下复制到 Program Files

    我用C 编写了一个向导 它将一些文件安装到Windows下的程序文件文件夹中 据我了解 我需要管理员权限才能在 Vista 7 下写入程序文件 所以我的问题是 有没有一种方法可以在应用程序分别运行时仅针对一个向导页面打开管理员权限 或者我是
  • 巴泽尔的$地点扩张

    我想添加 location 扩展到rules scala for jvm flags我在其中设置依赖项的属性data属性 但失败了 label src java com google devtools build lib worker in
  • CoffeeScript 类在主 javascript 中不可访问

    我有一个用咖啡脚本编写的课程 例如 class Example constructor gt each 1 2 3 key value gt test value return test render gt alert test 我把这个类
  • Mahapps 1.3 对话框和 Avalon.Wizard

    我已经集成了流行的 UI 库Mahapps http mahapps com 与阿瓦隆精灵 https avalonwizard codeplex com 控制 它集成得很好 但我对 Mahapps 对话框有疑问 Wizard 控件定义了一
  • PYPY3——无法安装 Pandas

    我一直在尝试在 PYPY 中安装 pandas 但没有成功 以下是完整的日志消息 Windows 10 64 位操作系统 已安装 Visual C 2015 2019 可再发行组件 Python 3 7 点 19 3 1 通过 Anacon
  • 在中国电话中向上滑动时应用程序后台服务停止

    我一直在寻找有关中国手机 Oppo 华为 小米 Vivo 等 这个问题的答案 当应用程序向上滑动 关闭 时 后台服务停止运行 大多数解决方案是 包含 START STICKY 并使用 AlarmManager 启动服务 以编程方式将用户引导
  • Java Reflection:查找自定义 AbstractProcessor 中的方法用法

    我是反思的新手 有没有办法检测特定方法在哪里被调用 例如 public class MyClass public static void method DO SOMETHING public class Test public test M
  • 如何更改 Emacs 中的草稿消息?

    刮擦消息总是说 This buffer is for notes you don t want to save and for Lisp evaluation If you want to create a file visit that
  • 在不使用服务器套接字的情况下侦听 AS3 (AIR) 客户端中的传入连接

    我设法创建一个 C 服务器 使用它向 AS3 AIR 客户端发送文件sockets 在 AS3 方面我使用的是flash net Socket库通过以下方式接收数据TCP 它是这样工作的 gt 我打开我的服务器 它侦听客户端 另外我可以创建
  • Nextjs 从父目录导入外部组件

    我有外部目录common我想将反应组件从该目录导入到web static In web static我正在使用nextjs 目前我遇到这个错误 Module not found Can t resolve react in Users ja
  • 如何使用 docker Secret 设置属性 spring.cloud.config.server.git.password

    我想对我的 Spring Cloud 配置服务器应用程序进行 docker 化 我正在创建一个 docker 秘密git repo pass保存github账号密码 我正在设置环境SPRING CLOUD CONFIG SERVER GIT
  • 如何在 C 中链接共享对象?

    我制作了一个使用共享对象的简单程序 用以下命令打开它dlopen 我还编译并链接了共享对象 如下所示 gcc o libmylib so libmylib c shared fPIC Wall gcc o program program c