Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.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++ linux dlopen:如何使加载库管理器_C++_Linux_Dlopen - Fatal编程技术网

C++ linux dlopen:如何使加载库管理器

C++ linux dlopen:如何使加载库管理器,c++,linux,dlopen,C++,Linux,Dlopen,我用不同的arch选项编译了相同的代码(FMV不起作用,因为函数返回sse,我不能用sse将“default”更改为其他内容) 如何创建一个元库,在加载时检查cpu能力并加载相应的库?(没有任何dlsym机制)实现所需功能的一种方法是链接虚拟包装库,该库在启动时检查CPU能力,加载匹配的共享库,然后将所有函数调用转发到此共享库中的实现 这种虚拟库可以手动实现,也可以通过自定义脚本生成。或者,您可以使用自动生成: $ implib-gen.py --dlopen-callback=load_myl

我用不同的arch选项编译了相同的代码(FMV不起作用,因为函数返回sse,我不能用sse将“default”更改为其他内容)
如何创建一个元库,在加载时检查cpu能力并加载相应的库?(没有任何dlsym机制)

实现所需功能的一种方法是链接虚拟包装库,该库在启动时检查CPU能力,加载匹配的共享库,然后将所有函数调用转发到此共享库中的实现

这种虚拟库可以手动实现,也可以通过自定义脚本生成。或者,您可以使用自动生成:

$ implib-gen.py --dlopen-callback=load_mylib mylib_avx.so

您需要实现
load_mylib
(以分析CPUID和
dlopen
适当的实现),并将您的应用程序与生成的文件链接起来。

定义“不同的拱门”。Linux发行版使用多库布局,其中64位库存在于/lib64中,32位库存在于/lib中。只需使用相同的文件名将相应的库安装到相应的目录中,并正常使用dlopen(),即可打开正确的库。我说的是“arch选项”;)在我的例子中,它们是:-msse,-mavx..等等…你的问题实际上是如何选择合适的arch选项。完成后,加载正确的库就很简单了。您只需查看/proc/cpuinfo即可。@SamVarshavchik我认为OP希望ELF解释器在程序启动时加载适当的库。好的,Linux的dlopen接口中没有任何东西可以根据CPU功能集自动选择共享对象。你得自己处理。其所有功能都记录在其手册页中。如果它不在那里,它就不存在。