【问题标题】:How to sand box C/C++ projects which use shared libraries如何沙盒使用共享库的 C/C++ 项目
【发布时间】:2017-11-05 06:26:18
【问题描述】:

我有时会尝试一些我想尝试的免费 C/C++ 项目。

9 次 10 次,这会导致所有依赖项都工作起来非常痛苦,而且至关重要的是,这不可避免地会破坏其他项目的依赖项,因此当我回到另一个项目时,我又要参加另一个受虐狂会议。

一定有更好的方法,但我一直没能找到。

那么是否应该安装共享库以便只有一个项目“看到”它们?

我在 Mac OS 上,所以我真的只对在那里工作的解决方案感兴趣。

我可以使用自制软件安装这些库的解决方案获得额外荣誉。

【问题讨论】:

  • 我不知道您的确切需求,但应该可以在不使用共享库的情况下构建这些应用程序。
  • 你是否考虑过使用一些包管理器,比如brew

标签: c++ c homebrew


【解决方案1】:

在编译(或者更确切地说是链接)应用程序时,您可以指定 -rpath 选项来告诉它在运行时在哪里搜索共享库。包含$ORIGIN 作为路径的第一个组件将导致搜索相对于可执行文件的位置进行。

这意味着您可以将可执行文件库与其他应用程序的库分开。

例如;假设您将应用程序安装在 /opt/myapp/bin/ 并将其库放入 /opt/myapp/lib/ ,那么您将 rpath 设置为 $ORIGIN/../lib/ 并且无论您将 /opt/myapp 目录移动到何处(只要你把它全部移动)应用程序就会在它自己的 lib/ 目录中找到它自己的特定版本的库。

这就是 Unix 解决方案。在 Windows 上,您可以简单地将 DLL 与可执行文件放在同一目录中,因为 Windows 会首先在那里搜索。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-11
    • 1970-01-01
    • 1970-01-01
    • 2012-02-28
    • 1970-01-01
    • 2020-05-02
    • 1970-01-01
    相关资源
    最近更新 更多