android - 在启动时是否需要对共享库中的函数的引用,或者直到实际使用才需要?
问题描述
注意:这个问题与编译期间的链接无关。
我问这个问题是因为在 Android 中我们必须处理不同的平台版本,而旧平台可能会缺少一些 libc 函数。
由于大多数人(包括我)都是针对最新的平台 SDK 构建的,所以我们总是可以链接到最新版本的仿生 libc,即使我们引用了仅在较新平台中出现的东西,编译也可以通过。
在 Java 中,通常会执行以下操作:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
// Call new API.
} else {
// Work around without the new API.
}
这样,即使编译后的字节码包含对新 API 的引用,它也会在旧 API 上正常执行,因为不会到达该引用。
所以我想知道我们是否可以在 C 中有类似的东西:
if (android_get_device_api_level() >= __ANDROID_API_P__) {
// Call new libc function.
} else {
// Work around without the new function.
}
即使引用了新功能,这是否可以在旧平台上工作?即Linux会为我们加载旧的libc,尽管缺少一些符号,还是会在启动时被拒绝?
解决方案
推荐阅读
- mongodb - 如何将 AWS EKS 的 pod 连接到 EC2 中的 MongoDB 等外部数据库?
- python - 减少 python 测试阶段的管道执行时间
- python - 为什么小部件在命令之前被删除?传统知识
- java - 无法将类型“class java.util.LinkedHashMap”的现有声明值转换为所需的类型类
- php - 如何使用 laravel 的 Request 传递参数?
- python - 在不使用 count() 的情况下计算字符串中的字母
- javascript - 在页面重新加载时保留字体真棒图标
- c++ - 致命错误:gst/gst.h:没有这样的文件或目录#include
- django-rest-framework - 我正在尝试在主项目 url 中添加两个应用程序 url 以列出具有相同端点的 defaultrouter 但它只显示一个
- javascript - jquery中的响应式单元格选择