问题标签 [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.
macos - 如何在 Mac 上配置 scons 以使用 rpath 进行链接?
它可以在 Ubuntu 上使用 RPATH 链接我的任务,但在 mac 上,它不起作用
在 Ubuntu 上,使用ldd
,我可以看到共享库与绝对路径链接。但是otool -L
在 mac 上使用给了我 Sconstruct 文件顶部目录的相对路径。有人使用 scons 在 mac 上正确设置 RPATH 吗?
linux - 共享对象文件的 rpath
可执行文件的rpath
指定一个或多个目录,在运行时在其中查找共享对象。
我的问题是 - 共享对象文件本身也有静态编译rpath
的吗?
我最近在与共享对象链接时收到了运行时错误:
这个错误向我表明,实际上库本身 -mylib.so
有一个静态编译的rpath
。
我的理解是rpath
仅适用于可执行文件,不适用于共享对象。那么是否rpath
也适用于共享对象?
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 。所以
c - 安装 cmocka 时如何处理 Mac OS X 上的 RPATH 问题?
我正在尝试cmocka
在 Mac OSX Yosemite 10.10.3 上安装和运行用于单元测试的库,但我的RPATH
设置存在一些问题。
更新:
感谢@baf,我能够cmocka.h
像这样手动包含在我的 CMakeLists.txt 中:
但是,为什么我必须手动进行呢?
我已经尝试了许多不同的安装方式:
到目前为止我所做的:
从这里下载 cmocka:这里。1.0 版。
tar xvf cmocka-1.0.1.tar.xz
cd cmocka-1.0.1
,mkdir build
和cd build
sudo cmake ..
我在这里收到这样的消息:
-- 配置完成
CMake 警告(开发):
未设置策略 CMP0042:MACOSX_RPATH 默认启用。运行“cmake --help-policy CMP0042”以获取策略详细信息。使用 cmake_policy 命令设置策略并禁止显示此警告。
未为以下目标指定 MACOSX_RPATH:
cmocka_shared
此警告适用于项目开发人员。使用 -Wno-dev 来抑制它。
问题#1:如何设置,rpath
以便没有像上面那样的警告?
须藤
make
须藤
make install
cmocka
现在应该安装了吧?
cmake
为我正在使用cmocka
库的程序运行。
所以现在我运行cmake
我的程序,我的主CMakeList.txt
文件有这样的行:
但是在这个阶段警告没有出现,所以我相信它find_libarary(CMOCKA cmocka)
已经成功地定位cmocka
在我的电脑上。
为我的程序运行make
。
运行时make
出现如下错误:
所以估计cmocka
是找不到了...
问题 #2:为什么cmocka
找不到库?
补充笔记:
我试过跑步
/li>
但它没有帮助。我想这是 Linux 的解决方案,而不是 Mac。
我试图从他们的官方文档中了解
RAPTH
有关 Mac 的信息:http: //www.cmake.org/Wiki/CMake_RPATH_handling。但是我了解的很少,我无法为我的问题提出解决方案。cmake
我试过安装
cmocka
usingbrew
但我得到了相同的结果。此外,我在 SO 上阅读了很多关于
RPATH
、链接和的问题cmocka
,但我也找不到合适的解决方案。不过,这里是相关线程的列表:我跑了
otool -L cmocka
。这是我得到的:
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 变量中按顺序指定所有库路径来修复它?
任何帮助将不胜感激。
c - 编译我的程序时防止 autotools 设置 rpath
我正在开发一个构建共享库和程序的示例自动工具项目。该程序应链接到共享库。但是当我构建程序时,libtool 会rpath
这样设置:
我不想要。
根据 Debian Wiki,libtool 不应该设置rpath
库何时位于默认搜索路径(libtool 的角色)中。
根据这个站点 /usr/local/lib
应该在链接器的默认搜索路径中。
该库和程序是由同一个autotools项目构建的,因此在构建程序时不会安装该库。
有谁知道为什么 libtool 设置了rpath
无论如何?
macos - OSX:使用依赖于运行时的 dylib 启动应用程序
OSX 10.10 优胜美地。
我的应用程序依赖于英特尔 IPP。在编译时它依赖于 2 个 dylib,但这些依赖于其他 dylib,这些 dylib在运行时加载(并且不显示在 otool -L 中)。启动我的应用程序时找不到这些库。
我不明白如何为我的应用程序(或依赖于编译时间的 dylibs)指定一个文件夹来搜索运行时 dylibs 的路径。
据我了解,有必要使用rpath。但是具体应该怎么做呢?如何设置运行时搜索路径?我是否需要为可执行文件或 dylib 设置“rpath”?
environment-variables - 为什么使用共享库时 -L 不自动包含 -rpath?
当 -L 已经告诉共享库路径在哪里时,我不明白为什么有必要使用 LD_LIBRARY_PATH 提供 rpath 或设置环境变量。
这个答案说: -L 告诉 ld 在链接时在哪里寻找要链接的库。
但是为什么同时没有自动设置相应的 -rpath呢?为什么我们需要再次手动执行?
PS:我想如果你有这个功能,那么可执行文件在其他环境中将毫无用处。但是如果是这样,那么ld在链接期间实际做了什么,或者如果 -rpath 在其他一些环境中不同,为什么有必要提供 -L 路径。
macos - 使用 CMAKE_MACOSX_RPATH 链接构建树之外的库
这个问题是 MacOS X 特有的。我想lib_xxx
在某个任意位置链接一个位于我的构建树之外的库。它将在所有系统中位于同一位置。默认情况下,CMake 会按如下方式添加依赖项
我想知道如何更改@executable_path
为:
库的绝对路径。
/li>otool
例如,我在输出中看到以下内容@rpath
然后我可以管理lib_xxx
using的位置RPATH
。我更喜欢这个选项。
从文档和论坛看起来CMAKE_MACOSX_RPATH
应该解决问题并实施选项(2)。然而,CMakeLists.txt
下面仍然会导致@executable_path/libwupienginemac.dylib
依赖。
c++ - 如何在 cmake 中指定 linux 二进制文件的 rpath
我有一个 CMakeLists.txt 文件,其中包含这样的代码行:
当我构建可执行文件并执行
在它上面,我看到带有 dir_a、dir_b dir_c 的 RPATH。
如果我想创建,我可以用 cmake 做什么
- 可以使用空 RPATH 执行吗?
- 可以使用某些路径执行,但未在 link_directories 行中指定?
可执行文件不应该被“安装”。