问题标签 [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.
qt - macdeployqt 错误:无法解析 rpath “QtGui.framework/Versions/5/QtGui(兼容版本 5.5.0,当前版本 5.5.0)”
我使用 qmake 在我的 MacBook 上编译我的 Qt 应用程序项目。
它需要一个名为 dylib 的 dylib libcore.dylib
,我把它放到了 dir$$OUT_PWD/../libs
中。
为了编译,我在.pro
文件中添加了这段代码
为了跑步,我加了
编译libcore.dylib
,我添加
完成后,我可以直接运行生成的应用程序。
但是当我使用 部署应用程序时macdeployqt
,会发生错误。
rpaths 的 QSet 不包含 /Users/sjchao/Applications/Qt/5.5/clang_64/lib
!
但最终编译的 cmd 包含-Wl,-rpath,/Users/sjchao/Applications/Qt/5.5/clang_64/lib
! 没用?_
我看到了一点macdeployqt
源shared.cpp,然后我用otool -l
来看LC_RPATH
LC_RPATH
使用, rpaths
should contains运行此代码/Users/sjchao/Applications/Qt/5.5/clang_64/lib
,但错误消息说不。
我的 Qt 版本是 5.5.0,我已经使用 MaintenanceTool 将它更新到最新版本。
我应该怎么办?它是一个错误macdeployqt
吗?有什么建议么?
ios - 原因:找不到合适的图像:Frameworks/libswiftCore.dylib;在 Xcode 7 中开始崩溃
我有一个用 Swift 编写的现有 iOS 项目,在 iOS 8.4.1 上成功运行。我已经在 Xcode 7 上编译了该项目,并根据 Swift 2.0 进行了一些更改。它在模拟器上运行。但是当我开始使用设备时,应用程序在启动时开始崩溃 /Frameworks/libswiftCore.dylib: mmap() error 1 at address=0x1002C0000, size=0x00214000 segment=__TEXT in Segment::map() mapping /private/var/mobile /Containers/Bundle/Application/89E98704-14A2-4341-B0A9-61F9DD639100/....../Frameworks/libswiftCore.dylib。我已经尝试了 StackOverflow 和其他资源中的所有建议,除了 Altering Apple Certificates。谁能让我知道会是什么问题以及我该如何克服这个问题。谢谢
c++ - 作为由相对路径加载的绝对路径传递给链接器的动态库?
我正在尝试构建和运行我正在处理的项目。我继续建造,一切都很棒,没有任何错误。然后,当我尝试运行可执行文件时,我收到一条错误消息,指出无法找到某些动态库依赖项:
有趣的。报告什么otool -l
?
是什么赋予了?我的构建调用是(经过一些清理之后),由 CMake 发出:
编译(为了可读性而换行)
关联:
据我所知,在链接阶段,两者libprotobuf.dylib
都libgpr.dylib
作为绝对路径传入。怎么会libprotobuf.dylib
被绝对路径加载而不是libgpr.dylib
?
对于它的价值,设置DYLD_LIBRARY_PATH
使它工作,但我不想设置它或导出它。我已经设置了我的仓库来构建所有依赖项并将它们放入一个特定的目录中,它应该只是克隆和构建。
我的编译器版本是:
c++ - 为外部项目设置 RPATH?
我正在尝试设置一个项目,其中我的存储库将所有依赖项导入为 git 子模块以便于开发。我的同事可以简单地克隆存储库,git submodule update --init --recursive
并cmake .
拥有make
一个完全可用的开发环境。目录结构被设置为一个超级CMakeLists.txt
构建,在顶层使用 构建所有子模块ExternalProject_Add
,导致以下结构:
CMakeLists.txt
看起来像这样:
构建过程效果很好。我make
在顶层,依赖项被安装到usr
,我cd
进入my_project
,我做我的工作,所有构建的共享库都被找到并链接,我很高兴。
但是,当我在内置的 OS X 上运行可执行文件时,我发现无法找到my_project
放置在目录中的动态库。usr/lib
似乎 CMake 只设置项目目录中构建的RPATH
库,在这种情况下只是.my_project
有什么方法可以将自定义安装位置添加到RPATH
构建时库和可执行文件?
几点注意事项:
- 这个问题似乎只影响 OS X。Linux 根本没有出现这些问题。
- 将 设置
DYLD_LIBRARY_PATH
为包括自定义安装位置有效。但是,这为设置增加了一个额外的步骤,当我尝试调试安装问题时它会变得很烦人。 - 设置
DYLD_FALLBACK_LIBRARY_PATH
也可以,尽管这也不是一个好的选择,因为它还添加了一个额外的设置,而且自制软件用户不会喜欢这个选项。
c++ - .pro 文件中的 RPATH 不起作用
我正在尝试添加$ORIGIN
到我的程序的 rpath 变量中。
我将以下行添加到我的 .pro 文件中:
并通过检查编译输出验证了该命令确实是添加的。qmake 生成的对 g++ 的调用如下所示:
如您所见,添加了原点(连同其他一些值)。但是,如果我使用 来检查 rpath 的值readelf
,则不会列出 origin。相反,除了 qmake 添加的条目之外,它还显示一个“空”条目(只有两个冒号):
我在这里想念什么?谢谢你的帮助!
linux - 在 RPATH 中指定 $ORIGIN 的推荐 GNU 链接器选项是什么?
假设我的平台是使用 GNU 构建工具链(GCC 等)的 vanilla(非嵌入式)x86-64 Linux。
要指定$ORIGIN
in RPATH
,我知道链接器选项:-Wl,-rpath,'\$\$ORIGIN'
.
今天,我发现了另一种选择:-Wl,-z,origin
.
使用时我应该始终包括吗?-Wl,-z,origin
-Wl,-rpath,'\$\$ORIGIN'
官方 GNU ld 文档,说:
标记对象可能包含 $ORIGIN。
macos - 无法在 osx 上更改 @rpath
我有一个具有以下依赖项的外部库“libspecial.dylib”。
因为@rpath 会导致问题,所以我有一个脚本将所有@rpath 替换为真实路径。
但这只会替换第二个依赖项(实际上还有更多依赖项,所有依赖项都被替换了,但不是第一个指向 lib 本身的依赖项):
我不知道为什么我不能改变第一个依赖。有任何想法吗?
在 OSX 10.11.1 上运行
c++ - 与 MAC 中的动态库目录不一致
我正在尝试在我的项目中包含一个动态库,并且我正在使用以下 CMake 脚本设置编译:
如果我打印变量 ${dlib_LIBRARIES} 的目录,我会得到:
这是正确的并且可以编译。执行可执行文件时出现问题并给出以下运行时错误:
这似乎是合乎逻辑的,因为如果我运行 otool -L 可执行文件,我会得到一个相对路径而不是绝对路径:
为什么 otool 显示的路径与使用 target_link_libraries 添加的路径不同,如何使用 cmake 解决此问题?
python - Installing QScintilla2 for Anaconda on OSX: an @rpath issue
With a lot of blood, sweat and tears I have managed to compile QScintilla2 (https://www.riverbankcomputing.com/software/qscintilla/download) for usage in the Anaconda Python Distribution (2.5.0; Python 2.7.11; PyQt4) on Mac OS X El Capitan.
After compilation and installation of everything inside the Qt4Qt5 and Python folders without errors or warnings, all appears to have ended up in the correct place in Anaconda.
However, when I try to import qscintilla2 with
I get the following error:
Thus the module does not seem to be able to find libQtGui.4.dylib
I have done some reading up on the @rpath variable on the excellent blog https://mikeash.com/pyblog/friday-qa-2009-11-06-linking-and-install-names.html and ended up with knowing I have to use otool
and install_name_tool
in my attempts to solve this problem.
If I run otool -L
I get the following output:
and otool -l gives me
As far as I can see it, there is no entry of @rpath present in this module (or at least I should have found an LC_RPATH command?). I can set this of course with install_name_tool afterwards, but that's where I get stuck.
I don't understand what in this situation is regarded as @loader_path and @executable_path for the Qsci.so module. It is located at
but it seems to be a direct reference to
So would /Users/daniel/anaconda/lib/python2.7/site-packages/PyQt4/ or /Users/daniel/anaconda/lib/ be the @loader_path in this case? I assume that the @executable_path just points to the path of the Python interpreter which is in /Users/daniel/anaconda/bin, but correct me if I am wrong.
Both libQtGui.4.dylib and libQtCore.4.dylib are located at
I tried to add what I think are the correct @rpaths manually with
the first entry assuming the containing folder of Qsci.so to be the @loader_path and the second one of libqscintilla2.11.dylib, but to no avail...
If I add the absolute path to @rpath with
it does solve the problem, so I do know this is an rpath issue. I do need the relative locations however as I plan to package the app once I get this right.
Thanks for any help with this, and my apologies that this post has become way longer than intended!
c++ - RPath 不适用于从 CMake 生成的 Make Install
我有一个小示例项目,我试图将动态库链接到可执行文件。
文件结构如下:
-项目
--dlibs
----引擎.h
----引擎.cpp
----CMakeLists.txt
- 可执行程序
----main.h
----main.cpp
----CMakeLists.txt
这就是我运行它的方法:
我得到的错误:
但是,构建文件夹中生成的文件有效。据我所知,如果我使用“make install”,我需要设置相对 RPath,并且我已经尝试过:
在 CMakteLists.txt(exe 文件夹)内,但结果相同。
我尝试了其他几种设置 RPath 的方法,但无济于事。
任何帮助是极大的赞赏。
此致