繁体   English   中英

How can I link both C and C++ code, along with C and C++ runtime libraries (including STL) on android ndk?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM