怎样判断dlopen的dylib是否适用于当前架构

是这样的最近在研究libapt的一些事项 找到了header和dylib准备放进去瞅瞅
但是在这之前我有点疑惑
跑了一下这个

lipo -info ./libapt-pkg.dylib

然后我得到的结果是这玩意不fat是个arm64的但是与此同时我在arm64e上

dlopen("/use/lib/libapt-pkg.dylib", RTL_NOW);

能给到一个ok的地址 但是dlsym取不到函数方法的地址不过这个问题不大有header了

所以我想问一下 这个dylib到底能不能用

我感觉是主模块为arm64e,dlopen的也需要是arm64e,反之arm64一样。

1 Like

也就是说lipo会明确指出arm64和arm64e
并且dyld不会再arm64e的情况下加载出arm64的符号的地址咯

我觉得是这样

if ( (sMainExecutableMachHeader->cpusubtype == CPU_SUBTYPE_ARM64_E) && (mh->cpusubtype != CPU_SUBTYPE_ARM64_E) )
    throw "arm64 dylibs cannot be loaded into arm64e processes";