- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
可执行文件的 rpath
指定一个或多个目录,在其中查找运行时的共享对象。
我的问题是 - 共享对象文件自身是否也有静态编译的rpath
?
我最近在链接共享对象时收到运行时错误:
./example: /opt/swt/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by ./mylib.so)
此错误向我表明实际库本身 - mylib.so
具有静态编译的 rpath
。
我的理解是 rpath
仅适用于可执行文件,不适用于共享对象。那么 rpath
也适用于共享对象吗?
最佳答案
do shared object files themselves also have statically-compiled
rpaths
它们可能(或可能不)取决于它们是否与 -Wl,-rpath=...
选项链接。
This error indicates to me that the actually library itself -
mylib.so
, has an statically compiledrpath
.
错误消息根本没有这么说。你从哪里得到这个想法的?
如果你想知道mylib.so
是否有DT_RPATH
,这样做:
readelf -d mylib.so | grep 'R.*PATH' # could also have RUNPATH
My understanding was that
rpath
only applied to executables, not shared objects. So doesrpath
also apply to shared objects?
您的理解不正确,RPATH
(和RUNPATH
)同样适用于共享对象。
关于linux - 共享对象文件的 rpath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30379996/
如果共享库链接到二进制文件,并且共享库还依赖于其他库,那么共享库的 RPATH 和二进制文件的 RPATH 的优先级(链接器搜索顺序)是什么?二进制文件的 RPATH 能否覆盖共享库中的 RPATH?
我已经对我的 IOS 应用程序进行了质量扫描分析。我收到以下警告: The binary has Runpath Search Path (@rpath) set. In certain cases
我在尝试通过 QtCreator 运行之前运行的程序时收到此警告。我还收到此警告: libicui18n.so.48,/home/maxim/install/Qt/lib/libQt5Core.so
我在我的 ELF 文件上运行了arm-linux-gnueabihf-ldd(一个来自 Cygwin,别问,一个来自 Ubuntu),尽管通过包含 -rpath-link 消除了 Ubuntu 上的警
我正在构建一个 C++ 应用程序,使用 Netbeans 6.9 作为我的 IDE。我有一个 C++ 库,它是一个纯 C 库的包装器。 我已将文件正确添加到项目中(使用添加库文件选项)。这是 g++
我正在使用 cmake 创建包 我有以下结构 bin/ bin1 lib/ lib1 lib2 其中 lib1 和 lib2 是外部动态库。如何设置 RPATH 使其自动与 l
我正在为 ARM 平台进行交叉编译。在我链接的许多库文件中,只有极少数有 rpath。 我不知道它来自哪里,因为我将我需要的所有库复制到一个文件夹中,然后使用 Netbeans(在带有 Linaro
我有一个应用程序,叫它 Animal.app .在其内部 Contents/Frameworks文件夹是一个框架,比如 Mammal.framework .而在 Versions/A/Framewor
我正在使用 CMake 进行交叉编译。 在我的 CMakeLists.txt 中(用于编译和交叉编译): set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) fin
在 Linux 上使用 CMake 构建之后(但在安装之前),所有链接的库都被添加到最终可执行文件的 RPATH 中。 但是,我想添加 $ORIGIN/../lib:到这个 RPATH。 到目前为止,
我在 OS X 上构建了一个可执行文件(名为 demux),但它总是无法加载而且我找不到原因: $ ./demux RPATH failed to expanding @rpath/sfeMo
我正在尝试设置一个项目,我的存储库将所有依赖项作为 git 子模块导入,以便于开发。我的同事可以简单地克隆 repo、git submodule update --init --recursive、c
我无法使 rpath 正常工作并使我的二进制文件在指定文件夹中搜索库: 我有 3 个非常简单的文件: main.c #include #include int main() { tes
可执行文件的 rpath 指定一个或多个目录,在其中查找运行时的共享对象。 我的问题是 - 共享对象文件自身是否也有静态编译的rpath? 我最近在链接共享对象时收到运行时错误: ./example:
我必须随应用程序一起发布第三方库。因为我不想手动设置 LD_LIBRARY_PATH 或需要任何包装脚本,所以我希望 automake 设置自定义 rpath。不幸的是 libtool 有它自己的 -
我很难确定我对使用我所使用的特定工具链进行交叉编译时rpath-link是如何工作的理解(尽管我认为这是一个普遍适用于交叉编译的普遍问题)。 当我查看构建库和应用程序时将哪些标志传递给编译器和链接器时
我有一个二进制“CeeloPartyServer”,它需要在运行时在 FreeBSD 机器上找到 libFoundation.so。它们都在同一个目录中。我编译(在另一个平台上,使用交叉编译器)Cee
构建二进制文件或库时,指定rpath,即 -Wl,rpath, 告诉链接器在二进制文件运行时在哪里找到所需的库。 这里关于绝对路径和相对路径的 UNIX 哲学是什么?使用绝对路径是否更好,以便可以从任
我想在Mac OSX下设置编译时可执行文件(用于链接器)的运行时路径,以便动态链接器在程序启动时找到非标准位置的共享库。 在Linux下,可以使用-Xlinker -rpath -Xlinker /p
基本上我想在自定义字典中使用库: 编译器参数: gcc -o conftest -Wl,-rpath=/MYPATH/ssl/lib -O2 -Wno-system-headers -I/MYPAT
我是一名优秀的程序员,十分优秀!