在 Linux 应用程序中,我不想使用“我自己的”配置解析器,而是使用(应该是?)已经可用的配置解析器。简单地保持应用程序配置的维护简单并且不添加额外的库。
因此,我正在从事的项目使用非系统目录来保存代码使用的一些 DLL。我不想将它们放在系统目录中,因此可执行文件设置了一个 rpath 来查找 DLL。然而,随着越来越多的库被添加,现在有 DLL 依赖于该目录中的其他 DLL。
这些库无法找到它们所依赖的 DLL,因为它们不位于链接器正在查找的目录中,例如系统目录。
有没有办法让 DLL 搜索这个特定的非系统目录?比如rpath?图书馆是如何做到这一点的?该项目使用的构建系统是 CMake(如果这有助于回答)。
这个答案不起作用,因为库中没有 rPath 标签: https: //unix.stackexchange.com/a/272286/4193
我考虑过使用LD_LIBRARY_PATH, 这很有效,但打字很烦人,而且让其他人使用该应用程序也不是那么好。如果有办法将rPath标签添加到库中,那将是最好的选择。
感谢指向以前的相关问题和答案。
yum groupinstall "Compatibility Libraries"
Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager
There is no installed groups file.
Maybe run: yum groups mark convert (see man yum)
Warning: Group compat-libraries does not have any packages to install.
Maybe run: yum groups mark install (see man yum)
No packages in any requested group available to install or update
yum groupinstall "Compatibility Libraries" --setopt=group_package_types=mandatory,default,optional
Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager
There is no installed groups file.
Maybe run: yum groups mark convert (see man …Run Code Online (Sandbox Code Playgroud) 我刚刚读了一个 ABI 的例子。这是正确的吗
ABI 与 API 类似,不同之处在于 ABI 是机器语言,而 API 是高级编程语言
ABI 是由机器语言编译库提供并属于其的接口吗?(如果我没猜错的话,一个自制的编译库提供了它的ABI(参见上面的例子)。操作系统可以被视为一个编译库,从而为应用程序访问其系统调用服务提供了自己的ABI。)
上面的例子并没有提到自制编译库的ABI是否依赖于操作系统。
https://en.wikipedia.org/wiki/Application_binary_interface但是提到了操作系统:
ABI 涵盖以下详细信息:
处理器指令集(详细信息如寄存器文件结构、堆栈组织、内存访问类型等)
处理器可以直接访问的基本数据类型的大小、布局和对齐方式
调用约定,控制函数参数的传递方式和返回值的检索方式;例如,是否所有参数都在堆栈上传递,或者某些参数在寄存器中传递,哪些寄存器用于哪些函数参数,以及堆栈上传递的第一个函数参数是首先还是最后压入堆栈
应用程序应如何对操作系统进行系统调用,如果 ABI 指定直接系统调用而不是对系统调用存根的过程调用,则系统调用号
而对于完整的操作系统ABI来说,则是目标文件、程序库等的二进制格式。
编译库的 ABI 是否取决于操作系统?(我想不会。即使编译库通过操作系统的 ABI 使用系统调用服务,依赖于操作系统(的 ABI)的是编译库而不是其 ABI。)
编译库的 ABI 可以独立于操作系统(的 ABI)吗?
谢谢。