我必须创建一个 C++ 程序来查明 *.so(共享对象)文件是 32 位还是 64 位(例如,libjvm.so)。我对 Windows 中的 dll 文件做了同样的操作,但卡在了非 Windows 共享对象文件上。
Linux 中有很多命令可以用来找出这个问题。但我没有看到一个简单的编程方式来获得它。命令 objdump 源代码有很多东西,不确定我是否可以在我的代码中复制它。
我不想在我的代码中使用 system("") 函数调用命令来获取架构细节。
知道如何使用 gnu c++ 程序获取 .so 文件的架构。
我正在使用 Linux RHEl 6.2 和编译器 GNU gcc 4.8.3。
谢谢
最佳答案
了解 ELF格式和 elf(5) .然后,只需读取 ELF header 并对其进行处理即可。
也许使用libelf
(甚至是 libbfd
,这在你的情况下是矫枉过正)但你可能甚至不需要它,你可以在某些 ElfN_Ehdr
上使用 fread
并使用 来自 ELF header 的 e_machine
和 e_type
。
当然,您可以使用 dlopen(3) 加载共享对象,但这确实运行了一些(构造函数,它可能是 function attribute )来自加载插件的代码。然后使用 dlsym(3)但要注意name mangling .
关于c++ - 如何使用 gnu c++ 程序获取共享对象文件(.so 文件)的体系结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35424987/