[英]How can I link both C and C++ code, along with C and C++ runtime libraries (including STL) on android ndk?
我有一个混合 C 和 C++ 代码的大型代码库。 它被内置到库中,然后最终成为在基于 android 的设备上运行的可执行文件。 这是一个不使用 gradle 的“外部构建系统”。 在构建完所有编译和库之后,最终的链接命令类似于
armv7a-linux-androideabi30-clang++ -pie -static-libstdc++ -o a.out -L...-lmylib1 -lmylib2 -lm -llog
当程序运行时,我得到“找不到符号 fread_unlocked”。 当我使用 -### 查看该链接命令的扩展时,clang++ 会自动在其他库中添加 -lc 和 -lgcc(否则,我会自己添加它们)。
或者,我尝试将 c++ 标准库(stl 之一,libc++)链接到 C Z3175872608434073C Z3175873773
armv7a-linux-androideabi30-clang -o a.out -L...-lmylib1 -lmylib2 -lm -llog -lc++
执行程序时,我得到“找不到 libc++_shared.so”。 我不想将任何共享库与我的应用程序一起复制,因此我更喜欢静态链接 c++ 库,但我看不到使用 clang 的方法。 如果我尝试使用 -static 静态链接整个事物,则它找不到 static 版本的 liblog 等。 而且我确认最新的ndk中没有liblog.a(只有liblog.so)。
So, I believe my basic need is to link a mixture of C and C++ code, along with C and C++ runtimes, and have no shared lib dependencies on target.
我正在为 API 30 构建并在较旧的目标上运行。 我将链接命令更改为 armv7a-linux-androideabi23-clang++ 并且它有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.