macOS Big Sur:dlopen("/usr/lib/libssl.dylib") 崩溃并显示“程序正在以不安全的方式加载 libcrypto”

问题描述

根据macOS Big Sur 11.0.1 Release Notes

macOS Big Sur 11.0.1 中的新功能,系统附带内置动态 所有系统提供的库的链接器缓存。作为这一变化的一部分, 文件系统上不再存在动态库的副本。 尝试通过查看来检查动态库是否存在的代码 对于路径中的文件或枚举目录将失败。反而, 通过尝试 dlopen() 路径检查库是否存在 将正确检查缓存中的库。

我使用的是 M1 macOS Big Sur 11.1,/usr/lib/libssl.dylib 中没有文件

$ ls /usr/lib/libssl.dylib
ls: /usr/lib/libssl.dylib: No such file or directory

所以我假设 libssl.dylib链接器缓存中,但是 这个简单的程序:

#include <dlfcn.h>
#include <stdio.h>

int main() {
    printf("Calling dlopen()..\n");
    void* handle = dlopen("/usr/lib/libssl.dylib",RTLD_Now );
    if (handle == NULL) {
        fprintf(stderr,"Could not open libssl.dylib: %s\n",dlerror());
        return 1;
    }
    if (dlclose(handle) != 0) {
        fprintf(stderr,"Could not close libssl.dylib: %s\n",dlerror());
        return 1;
    }
    printf("Success!\n");
    return 0;
}

编译

cc -g -o test_load load.c -ldl

崩溃:

$ ./test_load
Calling dlopen()..
WARNING: /Users/hakonhaegland/test/test_load is loading libcrypto in an unsafe way
[1]    9364 abort      ./test_load

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...