如何指定库路径的首选项?

2023-11-24

我正在使用以下命令编译 C++ 程序g++ and ld。我有一个.so我想在链接期间使用的库。然而,同名的库存在于/usr/local/lib, and ld正在选择该库而不是我直接指定的库。我怎样才能解决这个问题?

对于下面的示例,我的库文件是/my/dir/libfoo.so.0。我尝试过但不起作用的事情:

  • 我的 g++ 命令是g++ -g -Wall -o my_binary -L/my/dir -lfoo bar.cpp
  • adding /my/dir到我的开始或结束$PATHen` 变量
  • adding /my/dir/libfoo.so.0作为 g++ 的参数

添加新库所在的路径LD_LIBRARY_PATH(它在 Mac 上的名称略有不同......)

您的解决方案应该与使用-L/my/dir -lfoo选项,在运行时使用 LD_LIBRARY_PATH 指向库的位置。

小心使用 LD_LIBRARY_PATH- 简而言之(来自链接):

..影响..:
Security:还记得 LD_LIBRARY_PATH 中指定的目录在标准位置之前(!)被搜索吗?在那里面 这样,一个讨厌的人可能会让你的应用程序加载一个版本 包含恶意代码的共享库!这就是原因之一 setuid/setgid 可执行文件确实忽略了该变量!
表现:链接加载器必须搜索所有指定的目录,直到找到共享库所在的目录 驻留 – 对于应用程序链接的所有共享库! 这意味着对 open() 的大量系统调用将失败 “ENOENT(没有这样的文件或目录)”!如果路径包含很多 目录,调用失败的次数会线性增加,并且 您可以从应用程序的启动时间看出这一点。如果有一些 (或所有)目录都在 NFS 环境中,启动时 您的应用程序的时间确实会变长 - 并且会减慢 整个系统!
不一致: 这是最常见的问题。 LD_LIBRARY_PATH 强制应用程序加载未链接的共享库 反对,这很可能与原始版本不兼容 版本。这可以是非常明显的,即应用程序 崩溃,或者如果拾取的库不正确,可能会导致错误的结果 完全符合原始版本的要求。尤其是 后者有时很难调试。

OR

通过 gcc 使用 rpath 选项到链接器 - 运行时库搜索路径,将被使用 而不是在标准目录中查找(gcc 选项):

-Wl,-rpath,$(DEFAULT_LIB_INSTALL_PATH)

这对于临时解决方案来说是很好的。链接器首先在 LD_LIBRARY_PATH 中搜索库,然后再查看标准目录。

如果您不想永久更新 LD_LIBRARY_PATH,您可以在命令行上动态执行此操作:

LD_LIBRARY_PATH=/some/custom/dir ./fooo

您可以检查链接器了解哪些库(示例):

/sbin/ldconfig -p | grep libpthread
        libpthread.so.0 (libc6, OS ABI: Linux 2.6.4) => /lib/libpthread.so.0

您可以检查您的应用程序正在使用哪个库:

ldd foo
        linux-gate.so.1 =>  (0xffffe000)
        libpthread.so.0 => /lib/libpthread.so.0 (0xb7f9e000)
        libxml2.so.2 => /usr/lib/libxml2.so.2 (0xb7e6e000)
        librt.so.1 => /lib/librt.so.1 (0xb7e65000)
        libm.so.6 => /lib/libm.so.6 (0xb7d5b000)
        libc.so.6 => /lib/libc.so.6 (0xb7c2e000)
        /lib/ld-linux.so.2 (0xb7fc7000)
        libdl.so.2 => /lib/libdl.so.2 (0xb7c2a000)
        libz.so.1 => /lib/libz.so.1 (0xb7c18000)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何指定库路径的首选项? 的相关文章

  • 编译时运算符

    有人可以列出 C 中可用的所有编译时运算符吗 C 中有两个运算符 无论操作数如何 它们的结果始终可以在编译时确定 它们是sizeof 1 and 2 当然 其他运算符的许多特殊用途可以在编译时解决 例如标准中列出的那些整数常量表达式 1 与
  • 通过 CMIS (dotCMIS) 连接到 SP2010:异常未经授权

    我正在使用 dotCMIS 并且想要简单连接到我的 SP2010 服务器 我尝试用 C 来做到这一点 如下所示http chemistry apache org dotnet getting started with dotcmis htm
  • 为什么 C# Array.BinarySearch 这么快?

    我已经实施了一个很简单用于在整数数组中查找整数的 C 中的 binarySearch 实现 二分查找 static int binarySearch int arr int i int low 0 high arr Length 1 mid
  • WCF RIA 服务 - 加载多个实体

    我正在寻找一种模式来解决以下问题 我认为这很常见 我正在使用 WCF RIA 服务在初始加载时将多个实体返回给客户端 我希望两个实体异步加载 以免锁定 UI 并且我想利用 RIA 服务来执行此操作 我的解决方案如下 似乎有效 这种方法会遇到
  • 为什么当实例化新的游戏对象时,它没有向它们添加标签? [复制]

    这个问题在这里已经有答案了 using System Collections using System Collections Generic using UnityEngine public class Test MonoBehaviou
  • 如何使用 ICU 解析汉字数字字符?

    我正在编写一个使用 ICU 来解析由汉字数字字符组成的 Unicode 字符串的函数 并希望返回该字符串的整数值 五 gt 5 三十一 gt 31 五千九百七十二 gt 5972 我将区域设置设置为 Locale getJapan 并使用
  • 用于登录 .NET 的堆栈跟踪

    我编写了一个 logger exceptionfactory 模块 它使用 System Diagnostics StackTrace 从调用方法及其声明类型中获取属性 但我注意到 如果我在 Visual Studio 之外以发布模式运行代
  • 将多个表映射到实体框架中的单个实体类

    我正在开发一个旧数据库 该数据库有 2 个具有 1 1 关系的表 目前 我为每个定义的表定义了一种类型 1Test 1Result 我想将这些特定的表合并到一个类中 当前的类型如下所示 public class Result public
  • 如何在整个 ASP .NET MVC 应用程序中需要授权

    我创建的应用程序中 除了启用登录的操作之外的每个操作都应该超出未登录用户的限制 我应该添加 Authorize 每个班级标题前的注释 像这儿 namespace WebApplication2 Controllers Authorize p
  • 如何序列化/反序列化自定义数据集

    我有一个 winforms 应用程序 它使用强类型的自定义数据集来保存数据进行处理 它由数据库中的数据填充 我有一个用户控件 它接受任何自定义数据集并在数据网格中显示内容 这用于测试和调试 为了使控件可重用 我将自定义数据集视为普通的 Sy
  • 如何查看网络连接状态是否发生变化?

    我正在编写一个应用程序 用于检查计算机是否连接到某个特定网络 并为我们的用户带来一些魔力 该应用程序将在后台运行并执行检查是否用户请求 托盘中的菜单 我还希望应用程序能够自动检查用户是否从有线更改为无线 或者断开连接并连接到新网络 并执行魔
  • 向现有 TCP 和 UDP 代码添加 SSL 支持?

    这是我的问题 现在我有一个 Linux 服务器应用程序 使用 C gcc 编写 它与 Windows C 客户端应用程序 Visual Studio 9 Qt 4 5 进行通信 是什么very在不完全破坏现有协议的情况下向双方添加 SSL
  • 通过指向其基址的指针删除 POD 对象是否安全?

    事实上 我正在考虑那些微不足道的可破坏物体 而不仅仅是POD http en wikipedia org wiki Plain old data structure 我不确定 POD 是否可以有基类 当我读到这个解释时is triviall
  • 将控制台重定向到 .NET 程序中的字符串

    如何重定向写入控制台的任何内容以写入字符串 对于您自己的流程 Console SetOut http msdn microsoft com en us library system console setout aspx并将其重定向到构建在
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • 混合 ExecutionContext.SuppressFlow 和任务时 AsyncLocal.Value 出现意外值

    在应用程序中 由于 AsyncLocal 的错误 意外值 我遇到了奇怪的行为 尽管我抑制了执行上下文的流程 但 AsyncLocal Value 属性有时不会在新生成的任务的执行范围内重置 下面我创建了一个最小的可重现示例来演示该问题 pr
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur
  • 如何在文本框中插入图像

    有没有办法在文本框中插入图像 我正在开发一个聊天应用程序 我想用图标图像更改值 等 但我找不到如何在文本框中插入图像 Thanks 如果您使用 RichTextBox 进行聊天 请查看Paste http msdn microsoft co
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低
  • 对来自流读取器的过滤数据执行小计

    编辑问题未得到解答 我有一个基于 1 个标准的过滤输出 前 3 个数字是 110 210 或 310 给出 3 个不同的组 从流阅读器控制台 问题已编辑 因为第一个答案是我给出的具体示例的字面解决方案 我使用的实际字符串长度为 450 个

随机推荐

  • 在 plpython3u 过程中导入 Python 包时出现“找不到模块”

    我正在使用一个plpython3存储的函数 在postgres数据库上MacOS 与标准企业数据库包一起安装 我可以导入标准 python 包 例如 CREATE OR REPLACE FUNCTION foo x double preci
  • 仅将一条记录标记为默认的约束

    如何在表上设置约束 以便只有一条记录具有其isDefault位字段设置为 1 约束不是表范围 而是由 FormID 指定的每组行的一个默认值 使用唯一的过滤索引 在 SQL Server 2008 或更高版本上 您可以简单地使用唯一过滤索引
  • 在 Elasticsearch 插件中读取文件

    我正在编写一个 elasticsearch 插件 它依赖于从磁盘上的文件读取数据 当我尝试在代码中访问此文件时 出现以下异常 Caused by java security AccessControlException access den
  • Spring Boot 拦截所有异常处理程序

    我正在尝试执行一些适用于我所有的通用逻辑 ExceptionHandler代码中 我知道我可以写一个HandlerInterceptor拦截快乐路径 但我想挂钩异常处理生命周期 以便可以在呈现错误响应之前执行一些常见逻辑 例如日志记录 无论
  • CPP + 正则表达式验证 URL

    我想在 c MFC 中构建一个正则表达式来验证 URL 正则表达式必须满足以下条件 有效网址 http cu 241 dell tech co in MyWebSite ISAPIWEBSITE Denypage aspx http www
  • Android Contentprovider - 在插入方法中更新

    可以打电话吗SQLiteDatabase更新方法在insert 内容提供者的重写方法 基本上没问题 但由于你没有提供代码 我只能发布两种可能的方法 First In your content provider public Uri inse
  • 如何重置字典中的所有值

    green 0 y3 1 m tt 0 newaccount 0 egg 0 results 0 dan 0 Lewis 0 NewAccount2 0 testyear3 1 testyear6 0 NewAccount1 0 testy
  • 如何设置TextInputLayout错误消息颜色?

    如何更改可设置为显示在文本字段下方的错误消息的颜色TextInputLayout via setError 在这里查看错误状态 它通常显示为红色 我想改变它 我应该在我的项目中使用哪些项目名称 键styles xml文件来定位颜色 Edit
  • 使用 Jenkins 从机器 B 运行机器 A 的构建

    我有 2 台电脑 Com A Com B 我在 Com A 上使用 selenium webdriver Testng 和 maven 构建自动化功能脚本 Com A 已经安装了 Jenkins 的所有内容 但 Com B 只有 jenki
  • 避免 WordPress 插件上的 jquery 冲突的防弹方法

    我开发 WordPress 插件已经有一段时间了 我的所有插件似乎总是遇到以下问题 Jquery 冲突问题 我尝试了很多不同的方法来避免这些问题 但我总是让用户联系我说 当他们安装了我的一个插件时 它已经阻止了另一个插件的工作aahhhhh
  • 使用 swift 在图像上覆盖文本

    我正在尝试使用 Swift 在图像上覆盖一些文本 并在此处查看此代码 src 如何在 iOS Swift 中向图像添加文本 这会将文本置于正中央 我一直在改变价值观 var rect CGRectMake 10 150 inImage si
  • 如何获取android中停止服务的意图

    我在用stopService 停止服务 我想发送额外的数据意图 如何在服务中检索这些额外数据 据我所知 这个Intent未交付至Service以任何方式 代替stopService 您可以使用startService 传递您的额外内容 并在
  • 将新节点添加到现有 XmlDocument 对象

    我有一个以下格式的 xml
  • 玩!框架 - 视图未编译?

    我创建了一个新项目并使用 eclipse 使用eclipsify命令 基本上 我移动了app目录从旧项目到我创建的新项目 问题是 eclipse 无法识别这些视图 我收到如下错误 views html viewTopic 无法解析为类型 我
  • 反序列化期间未知元素将被忽略

    当我使用 XmlTextReader 反序列化 XML 文档时 没有相应类的文本元素将被简单地忽略 Note 这是not关于 XML 中缺少的元素 这些元素需要存在 而是存在于 XML 文本中 而在代码中没有等效属性 我本希望得到一个异常
  • 如何将日期时间格式设置为 24 小时时间?

    我需要日期时间中的字符串来以 24 小时格式显示时间 var curr DateTime Now string s Console WriteLine s 输出结果必须是 16 38 谢谢 使用大写HH对于 24 小时格式 String s
  • python合并两个列表(偶数/奇数元素)

    给定两个列表 我想合并它们 以便第一个列表中的所有元素都是偶数索引 保留它们的顺序 第二个列表中的所有元素都是奇数索引 也保留它们的顺序 下面的例子 x 0 1 2 y 3 4 result 0 3 1 4 2 我可以使用 for 循环来做
  • Laravel 没有数据库连接

    有没有一种方法可以在没有数据库连接的情况下使用 Laravel 我计划使用 Blade 和 VueJS 创建一个前端网站 该网站将使用第三方 API 并且不需要数据库 目前 我收到此错误 但不知道如何绕过它 Database name se
  • 可以全屏打开程序的应用程序?

    我需要制作一个在全屏模式下启动新程序 例如记事本 的应用程序 我可以在 c 中做到这一点吗 我希望有一个代码示例 谢谢 您可以使用Process Start with a ProcessStartInfo对象有一个WindowStyle财产
  • 如何指定库路径的首选项?

    我正在使用以下命令编译 C 程序g and ld 我有一个 so我想在链接期间使用的库 然而 同名的库存在于 usr local lib and ld正在选择该库而不是我直接指定的库 我怎样才能解决这个问题 对于下面的示例 我的库文件是 m