问题标签 [rpath]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
1116 浏览

macos - 如何在 Mac 上配置 scons 以使用 rpath 进行链接?

它可以在 Ubuntu 上使用 RPATH 链接我的任务,但在 mac 上,它不起作用

在 Ubuntu 上,使用ldd,我可以看到共享库与绝对路径链接。但是otool -L在 mac 上使用给了我 Sconstruct 文件顶部目录的相对路径。有人使用 scons 在 mac 上正确设置 RPATH 吗?

0 投票
1 回答
8277 浏览

linux - 共享对象文件的 rpath

可执行文件的rpath指定一个或多个目录,在运行时在其中查找共享对象。

我的问题是 - 共享对象文件本身也有静态编译rpath的吗?

我最近在与共享对象链接时收到了运行时错误:

这个错误向我表明,实际上库本身 -mylib.so有一个静态编译的rpath

我的理解是rpath仅适用于可执行文件,不适用于共享对象。那么是否rpath 适用于共享对象?

0 投票
3 回答
4942 浏览

cmake - CMake交叉编译目标rpath

我正在使用 CMake 进行交叉编译。

在我的 CMakeLists.txt 中(用于编译和交叉编译):

在我的 toolchain.cmake 中:

考虑foo位于/path/to/sysroot/usr/local/lib/foo.so,当我交叉编译mylib的运行时路径是/path/to/sysroot/usr/local/lib

我希望运行时路径是/usr/local/lib以反映我的目标文件系统。

如果不在我的 CMakelists.txt 中定义硬编码的CMAKE_INSTALL_RPATH变量,我怎么能做到这一点?

编辑:我使用 /usr/local/lib 作为示例,但foo lib 位于不属于系统目录的特定文件夹中:/path/to/sysroot/usr/local/share/mypackage/lib/foo 。所以

0 投票
1 回答
1158 浏览

c - 安装 cmocka 时如何处理 Mac OS X 上的 RPATH 问题?

我正在尝试cmocka在 Mac OSX Yosemite 10.10.3 上安装和运行用于单元测试的库,但我的RPATH设置存在一些问题。

更新:

感谢@baf,我能够cmocka.h像这样手动包含在我的 CMakeLists.txt 中:

但是,为什么我必须手动进行呢?


我已经尝试了许多不同的安装方式:

到目前为止我所做的:

  1. 从这里下载 cmocka:这里。1.0 版。

  2. tar xvf cmocka-1.0.1.tar.xz

  3. cd cmocka-1.0.1,mkdir buildcd build

  4. sudo cmake ..
    我在这里收到这样的消息:

-- 配置完成

CMake 警告(开发):

未设置策略 CMP0042:MACOSX_RPATH 默认启用。运行“cmake --help-policy CMP0042”以获取策略详细信息。使用 cmake_policy 命令设置策略并禁止显示此警告。

未为以下目标指定 MACOSX_RPATH:

cmocka_shared

此警告适用于项目开发人员。使用 -Wno-dev 来抑制它。

问题#1:如何设置,rpath以便没有像上面那样的警告?

  1. 须藤make

  2. 须藤make install

  3. cmocka现在应该安装了吧?


cmake为我正在使用cmocka库的程序运行。

所以现在我运行cmake我的程序,我的主CMakeList.txt文件有这样的行:

但是在这个阶段警告没有出现,所以我相信它find_libarary(CMOCKA cmocka)已经成功地定位cmocka在我的电脑上。

为我的程序运行make

运行时make出现如下错误:

所以估计cmocka是找不到了...

问题 #2:为什么cmocka找不到库?


补充笔记:

  1. 我试过跑步

    /li>

但它没有帮助。我想这是 Linux 的解决方案,而不是 Mac。

  1. 我试图从他们的官方文档中了解RAPTH有关 Mac 的信息:http: //www.cmake.org/Wiki/CMake_RPATH_handling。但是我了解的很少,我无法为我的问题提出解决方案。cmake

  2. 我试过安装cmockausingbrew但我得到了相同的结果。

  3. 此外,我在 SO 上阅读了很多关于RPATH、链接和的问题cmocka,但我也找不到合适的解决方案。不过,这里是相关线程的列表:

  4. 我跑了otool -L cmocka。这是我得到的:

0 投票
1 回答
561 浏览

oracle - 设置 LD_LIBRARY_PATH 会破坏我的 apache 模块,rpath 可以修复它吗?

我有一个问题需要我在运行 Apache (2.2) 时设置 LD_LIBRARY_PATH 环境变量,不幸的是这会破坏一个完美运行的模块。我正在寻找一种方法来修复它,并想知道我自己编译的模块是否可以重新编译并与 rpath 的使用链接。

到目前为止的故事: 我在 Solaris 上,我已经编译了 Apache 并启用了动态共享对象。然后我使用 apxs 编译了一个名为 auth_gss 的模块并将其加载到 Apache 中,一切正常。

然后我编译了 PHP 并加载了它,这也很棒,但是最后一个难题是 PHP 中的 Oracle OCI8 扩展。这编译得很好,但是在加载时抱怨它找不到所需的库,没问题,Oracle 说你必须将 LD_LIBRARY_PATH 设置为 Oracle Instant Client 主目录。我设置它并重新启动 apache 并且 OCI 模块正在工作,但是 auth_gss 模块现在中断了。

我假设它正在从 LD_LIBRARY_PATH 中获取一个不应该的库,我想知道是否有一种方法可以编译 auth_gss 模块,以便它不会查看 LD_LIBRARY_PATH。

因此我的问题是,如果我在链接我的 auth_gss 模块时指定 -Wl,-rpath=/usr/local/lib (它的所有依赖项所在的位置),它实际上会在 LD_LIBRARY_PATH 中寻找它们吗?从我读过的内容来看,我认为在 Solaris 上总是使用该变量,在这种情况下,我该如何解决这个问题?

还是我真的很愚蠢,是否会在 LD_LIBRARY_PATH 变量中按顺序指定所有库路径来修复它?

任何帮助将不胜感激。

0 投票
1 回答
458 浏览

c - 编译我的程序时防止 autotools 设置 rpath

我正在开发一个构建共享库和程序的示例自动工具项目。该程序应链接到共享库。但是当我构建程序时,libtool 会rpath这样设置:

我不想要。

根据 Debian Wiki,libtool 不应该设置rpath库何时位于默认搜索路径(libtool 的角色)中。

根据这个站点 /usr/local/lib应该在链接器的默认搜索路径中。

该库和程序是由同一个autotools项目构建的,因此在构建程序时不会安装该库。

有谁知道为什么 libtool 设置了rpath无论如何?

0 投票
1 回答
51 浏览

macos - OSX:使用依赖于运行时的 dylib 启动应用程序

OSX 10.10 优胜美地。
我的应用程序依赖于英特尔 IPP。在编译时它依赖于 2 个 dylib,但这些依赖于其他 dylib,这些 dylib在运行时加载(并且不显示在 otool -L 中)。启动我的应用程序时找不到这些库。

我不明白如何为我的应用程序(或依赖于编译时间的 dylibs)指定一个文件夹来搜索运行时 dylibs 的路径

据我了解,有必要使用rpath。但是具体应该怎么做呢?如何设置运行时搜索路径?我是否需要为可执行文件或 dylib 设置“rpath”?

0 投票
1 回答
846 浏览

environment-variables - 为什么使用共享库时 -L 不自动包含 -rpath?

当 -L 已经告诉共享库路径在哪里时,我不明白为什么有必要使用 LD_LIBRARY_PATH 提供 rpath 或设置环境变量。

这个答案说: -L 告诉 ld 在链接时在哪里寻找要链接的库。

但是为什么同时没有自动设置相应的 -rpath呢?为什么我们需要再次手动执行?

PS:我想如果你有这个功能,那么可执行文件在其他环境中将毫无用处。但是如果是这样,那么ld在链接期间实际做了什么,或者如果 -rpath 在其他一些环境中不同,为什么有必要提供 -L 路径。

0 投票
1 回答
1358 浏览

macos - 使用 CMAKE_MACOSX_RPATH 链接构建树之外的库

这个问题是 MacOS X 特有的。我想lib_xxx在某个任意位置链接一个位于我的构建树之外的库。它将在所有系统中位于同一位置。默认情况下,CMake 会按如下方式添加依赖项

我想知道如何更改@executable_path为:

  1. 库的绝对路径。otool例如,我在输出中看到以下内容

    /li>
  2. @rpath然后我可以管理lib_xxxusing的位置RPATH。我更喜欢这个选项。

从文档和论坛看起来CMAKE_MACOSX_RPATH应该解决问题并实施选项(2)。然而,CMakeLists.txt下面仍然会导致@executable_path/libwupienginemac.dylib依赖。

0 投票
1 回答
818 浏览

c++ - 如何在 cmake 中指定 linux 二进制文件的 rpath

我有一个 CMakeLists.txt 文件,其中包含这样的代码行:

当我构建可执行文件并执行

在它上面,我看到带有 dir_a、dir_b dir_c 的 RPATH。

如果我想创建,我可以用 cmake 做什么

  • 可以使用空 RPATH 执行吗?
  • 可以使用某些路径执行,但未在 link_directories 行中指定?

可执行文件不应该被“安装”。