gpt4 book ai didi

android - Clang 链接 .so 库 libc++_shared.so

转载 作者:行者123 更新时间:2023-12-02 11:08:16 26 4
gpt4 key购买 nike

我在 Android NDK 应用程序中的 native C++ 代码出现错误

我的main.cpp

#include <stdio.h>

int main()
{
printf("Hello, world\n");
return 0;
}

main.c 完全相同。如果我运行

/home/rip/Music/android-ndk-r19b/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android26-clang -pie main.c

然后

adb push a.out /data/local/tmp

adb shell /data/local/tmp/a.out

一切正常。但如果我跑

/home/rip/Music/android-ndk-r19b/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android26-clang++ -pie main.cpp

然后

adb push a.out /data/local/tmp

 adb shell /data/local/tmp/a.out

错误信息是:

CANNOT LINK EXECUTABLE "/data/local/tmp/a.out": library "libc++_shared.so" not found

然后我尝试运行

/home/rip/Music/android-ndk-r19b/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android26-clang++ -pie hello1.cpp  /home/rip/Music/android-ndk-r19b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android/libc++_shared.so

链接库,但无论如何都不起作用。

最佳答案

The error message is:

CANNOT LINK EXECUTABLE "/data/local/tmp/a.out": library "libc++_shared.so" not found

这是预期的行为。与标准 C 库(您的程序在使用简单 *-clang 构建时链接到的库)不同,C++ 不是系统库。您必须像任何其他第三方库一样在设备上提供它。

引自official documentation :

Note: libc++ is not a system library. If you use libc++_shared.so, it must be included in your APK. If you're building your application with Gradle this is handled automatically.

还有:

If you're using clang directly in your own build system, clang++ will use c++_shared by default. To use the static variant, add -static-libstdc++ to your linker flags.

因此,要么通过传递 -static-libstdc++ 静态链接 C++到编译器。或复制libc++_shared.so (在你的情况下来自 <NDK>/sources/cxx-stl/llvm-libc++/libs/arm64-v8a/ )并运行如下:

adb push a.out libc++_shared.so /data/local/tmp/
adb shell
cd /data/local/tmp/
LD_LIBRARY_PATH=. ./a.out

除了上面讨论的 LLVM 标准 C++ 库之外,还有一个有限的系统 C++ 运行时 ( /system/lib(64)/libstdc++.so ),它“提供对基本 C++ 运行时 ABI 的支持”。但是“系统 STL 将在未来的 NDK 版本中删除。”

关于android - Clang 链接 .so 库 libc++_shared.so,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55184167/

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