平利县城乡建设局网站,杭州建站价格,怎么建设自己个人网站,个人房产信息查询系统报错描述
在 Android NDK 相关的工程构建中#xff0c;出现报错#xff1a; undefined reference to __android_log_print’ 翻译成 QM 能理解的话#xff1a; 在链接阶段#xff0c; 遇到一个需要被链接的符号 __android_log_print, 但是没有在给出的依赖库里面找到 __an…报错描述
在 Android NDK 相关的工程构建中出现报错 undefined reference to __android_log_print’ 翻译成 QM 能理解的话 在链接阶段 遇到一个需要被链接的符号 __android_log_print, 但是没有在给出的依赖库里面找到 __android_log_print 符号。 [2/2] Linking CXX executable testbed
FAILED: testbed
cmd.exe /C cd . D:\soft\android-ndk\r26-beta1\toolchains\llvm\prebuilt\windows-x86_64\bin\clang.exe --targetaarch64-none-linux-android24 --sysrootD:/soft/android-ndk/r26-beta1/toolchains/llvm/prebuilt/windows-x86_64/sysroot -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE2 -Wformat -Werrorformat-security -fno-limit-debug-info -static-libstdc -Wl,--build-idsha1 -Wl,--no-rosegment -Wl,--no-undefined-version -Wl,--fatal-warnings -Wl,--no-undefined -Qunused-arguments CMakeFiles/testbed.dir/main.cpp.o -o testbed -latomic -lm cd .
ld.lld: error: undefined symbol: __android_log_printreferenced by main.cpp:10 (D:/github/min-repros/test_android_log/r21e/main.cpp:10)CMakeFiles/testbed.dir/main.cpp.o:(main)
clang: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.为什么要链接 __android_log_print
QM 的初始诉求是 不准开发的代码依赖 log 库。那么谁用了 __android_log_print 符号 目的又是什么
__android_log_print 符号 对应到 C/C 函数 用于打印日志并显示到 Android LogCat。啥意思 我们开发者提供的 .a/.so 库最终是放到 Android App 里使用的而 Android App 是一个 GUI 界面程序 它是没有控制台的 log 输出给用户看的。 也就是说如果用户的一些交互操作 导致 Android App 崩溃了 并且打算从 Android Studio 的 LogCat 去检查报错问题此时很可能是 Android Java/Kotlin开发者那么 LogCat 的报错信息是非常有用出的 快速定位问题。
当然 你也可以让 Android NDK 开发者完全不使用 __android_log_print. 那意味着 如果 Android App 出现 CrashAndroid App 的 Java/Kotlin 开发者无从查起 Android NDK 开发者也拿不到 log 内容 无法定位 bug。
复现代码
#include string.h
#include jni.h
#include android/log.h#define LOG_TAG foo
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)int main()
{LOGI(test);
}链接 log 库
add_executable(testbed main.cpp)
target_link_libraries(testbed PRIVATE log) # 增加这一行