gpt4 book ai didi

dylib - 使用 dlopen 查找 dylib 版本

转载 作者:行者123 更新时间:2023-12-02 22:01:34 41 4
gpt4 key购买 nike

有没有办法使用 dylib 的路径查找其版本?我正在寻找接受与 dlopen 相同参数的东西。我查看了 NSVersionOfRunTimeLibrary,但从我阅读的文档来看,它似乎获取了当前 dylib 的版本,而不是路径中指定的版本。

谢谢

最佳答案

在其上运行otool -L,它将显示其实际版本。我选择 libSystem.B,因为它在 10.4 和 10.5 SDK 中具有不同的版本:

$ otool -L /Developer/SDKs/MacOSX10.4u.sdk/usr/lib/libSystem.B.dylib
/Developer/SDKs/MacOSX10.4u.sdk/usr/lib/libSystem.B.dylib:
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 88.3.11)
/usr/lib/system/libmathCommon.A.dylib (compatibility version 1.0.0, current version 220.0.0)
$ otool -L /Developer/SDKs/MacOSX10.5.sdk/usr/lib/libSystem.B.dylib
/Developer/SDKs/MacOSX10.5.sdk/usr/lib/libSystem.B.dylib:
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.4)
/usr/lib/system/libmathCommon.A.dylib (compatibility version 1.0.0, current version 292.4.0)

(看看第一个版本是 88.3.11,而第二个版本是 111.1.4)。此示例还表明,并非所有库都是指向其中包含版本号的文件的符号链接(symbolic link):

$ ll /Developer/SDKs/MacOSX10.*.sdk/usr/lib/libSystem.B.dylib
-rwxr-xr-x 1 root wheel 749K May 15 2009 /Developer/SDKs/MacOSX10.4u.sdk/usr/lib/libSystem.B.dylib
-rwxr-xr-x 1 root wheel 670K May 15 2009 /Developer/SDKs/MacOSX10.5.sdk/usr/lib/libSystem.B.dylib
-rwxr-xr-x 1 root wheel 901K Sep 25 00:21 /Developer/SDKs/MacOSX10.6.sdk/usr/lib/libSystem.B.dylib

此处,文件名称中没有版本号。

编辑:第二种解决方案是在测试程序中使用NSVersionOfRunTimeLibrary,在其中强制加载要检查的库。从以下 C 源代码创建程序 libversion:

#include <stdio.h>
#include <mach-o/dyld.h>

int main (int argc, char **argv)
{
printf ("%x\n", NSVersionOfRunTimeLibrary (argv[1]));
return 0;
}

然后,你可以这样调用它:

$ DYLD_INSERT_LIBRARIES=/usr/lib/libpam.2.dylib ./a.out libpam.2.dylib
30000

(此处,版本号打印为十六进制,但您可以根据需要进行调整。)

关于dylib - 使用 dlopen 查找 dylib 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2260430/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com