Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用dlopen加载GNU ld脚本_C++_Gnu_Ld - Fatal编程技术网

C++ 使用dlopen加载GNU ld脚本

C++ 使用dlopen加载GNU ld脚本,c++,gnu,ld,C++,Gnu,Ld,我有一个C++14代码,它应该使用dlopen加载任意共享对象文件。不幸的是,在某些系统上(例如my archlinux,据说也适用于某些.so,如ubuntu和gentoo),这些so文件可能是“GNU ld脚本”,而不是实际的二进制文件 以下是我的/usr/lib/libm的内容供参考 /* GNU ld script */ OUTPUT_FORMAT(elf64-x86-64) GROUP ( /usr/lib/libm.so.6 AS_NEEDED ( /usr/lib/libmvec

我有一个C++14代码,它应该使用
dlopen
加载任意共享对象文件。不幸的是,在某些系统上(例如my archlinux,据说也适用于某些.so,如ubuntu和gentoo),这些so文件可能是“GNU ld脚本”,而不是实际的二进制文件

以下是我的
/usr/lib/libm的内容供参考

/* GNU ld script
*/
OUTPUT_FORMAT(elf64-x86-64)
GROUP ( /usr/lib/libm.so.6  AS_NEEDED ( /usr/lib/libmvec.so.1 ) )
我在or中找到了几个处理此问题的代码段。我希望避免诉诸于基于解析
dlerror
文本和文件的手动解析文本文件。我觉得这是非常邪恶的,我将无法实现和维护这种格式的角落案例

有没有一个干净的方法来处理这个案件?坦率地说,我很困惑为什么
dlopen
实际上不能并行处理这些问题


注意:考虑到前面提到的补丁,我认为这不仅仅是我的系统配置/版本的问题。如果这在dlopen(错误而不是缺少功能)下可以正常工作,请告诉我。

链接器脚本是供链接器使用的,而不是供运行时链接器使用的

gnuld脚本
注释应该是赠品:这是给
ld
,而不是给
ld.so
;-)

例如,见:

因此,我猜将此与
dlopen()
一起使用意味着模仿/导入
ld
的部分魔力,这将证实您对求助于手动解析文本和维护极其邪恶的代码的担忧

编辑:似乎有一件事可以帮助你:

应该包含一个define LIBM_,以便将它指向可以实际打开的正确文件()


这意味着通常没有邪恶的代码是必要的。

是你的LD,所以最近足够了。与特定语言无关,但关于加载/链接。@奥拉夫我正在寻找一个可以在我的C++程序中使用的解决方案。由于我在运行时使用C++或C代码加载库,所以我认为这是相关的。@ Zulan,我理解您需要使用<代码> dLOpen[](<代码)>这是一个函数,但是请不要把C++/C写成一种具有不同功能的单一语言。@marcolz:我有一个
/usr/lib/ld-2.22。因此
作为archlinux
glibc 2.22-3
的一部分,虽然这不是我希望/寻找的,但编辑确实很有帮助。虽然它不能透明地处理问题,并将解决方案转移到调用方代码中,但它是干净的,可以让我免于恐惧。