我有一个C++14代码,应该使用dlopen加载任意共享对象文件。不幸的是,在某些系统上(例如我的archlinux,据报道也适用于一些ubuntu和gentoo上的.so文件),这些so文件可以是“GNU ld脚本”,而不是实际的二进制文件。
供参考,这是我的/usr/lib/libm.so的内容:
我找到了几个处理ghc或ruby中此问题的代码片段。我想避免手动解析基于
有没有一种干净的方法来处理这种情况?坦白地说,我对
注意:考虑到上述补丁,我认为这不仅仅是我的系统配置/版本的问题。如果这应该在
供参考,这是我的/usr/lib/libm.so的内容:
/* GNU ld script
*/
OUTPUT_FORMAT(elf64-x86-64)
GROUP ( /usr/lib/libm.so.6 AS_NEEDED ( /usr/lib/libmvec.so.1 ) )
我找到了几个处理ghc或ruby中此问题的代码片段。我想避免手动解析基于
dlerror
文本和文件的文本文件。我认为这是非常恶劣的,而且我无法实现和维护这种格式的边角情况。有没有一种干净的方法来处理这种情况?坦白地说,我对
dlopen
为什么不能透明地处理这些情况感到困惑。注意:考虑到上述补丁,我认为这不仅仅是我的系统配置/版本的问题。如果这应该在
dlopen
中开箱即用(错误而不是缺少功能),请让我知道。
dlopen()
这个[tag:c]函数,但请不要将C++/C写成一个具有不同特性的单一语言。 - Iharob Al Asimi/usr/lib/ld-2.22.so
。 - Zulan