Android application链接c++库

APP_STL := gnustl_static
指定application里要链接的标准c++库。如果不指定,默认情况下,使用最小化的c++运行时系统库。
但是似乎APP_STL只是对动态库有效,如果是exe程序,则没有效果(据说是ndkr6的一个bug),需要显示地指定用gnustl_static。
如Android.mk里:
LOCAL_STATIC_LIBRARIES := libTest1 libTest2 gnustl_static

从android-ndk-r6b\sources\cxx-stl\gnu-libstdc++\Android.mk内容:
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := gnustl_static
LOCAL_SRC_FILES := libs/$(TARGET_ARCH_ABI)/libstdc++.a
LOCAL_EXPORT_CPPFLAGS := -fexceptions -frtti
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include \
                           $(LOCAL_PATH)/libs/$(TARGET_ARCH_ABI)/include
include $(PREBUILT_STATIC_LIBRARY)

可知,gnustl_static其实就是LOCAL_MODULE 名字,指定了c++库用gnu的libstdc++.a静态库。
既然APP_STL对exe程序无效,那么在exe的make中显示地指定要链接的c++库对应的LOCAL_MODULE名字为gnustl_static。在NDK中编译exe的时候,编译器是能识别到LOCAL_MODULE名字为gnustl_static的module的。所以编译exe就能正常work了。

在ndk-build 加参数V=1可以查看编译时的详细参数输出,如NDK自带的gcc的路径。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android Studio 中配置 C++ 编译环境需要以下步骤: 1. 安装 C++ 编译工具链 Android Studio 默认不包含 C++ 编译工具链。你需要手动安装它们。可通过 SDK Manager 安装 NDK(Native Development Kit)。 在 Android Studio 中打开 SDK Manager,选择 SDK Tools 标签页,然后勾选 NDK 选项并点击 Apply 按钮进行安装。 2. 配置 CMake CMake 是一个跨平台的构建工具,它可以自动生成 Makefile、Visual Studio 和 Xcode 等 IDE 的项目文件。Android Studio 已经集成了 CMake,你可以在项目的 build.gradle 文件中配置使用 CMake。 在 build.gradle 文件中添加以下代码: ```gradle android { ... externalNativeBuild { cmake { path "CMakeLists.txt" } } } ``` 其中,path 参数指定 CMakeLists.txt 文件的路径。 3. 配置 C++ 编译选项 你可以在 CMakeLists.txt 文件中配置 C++ 编译选项,例如编译标志、链接等。例如,以下代码添加了一个名为 mylib 的: ```cmake add_library(mylib SHARED mylib.cpp) ``` 4. 使用 C++ 代码 你可以在 Android Studio 中创建 C++ 文件并在项目中使用它们。例如,你可以创建一个名为 native-lib.cpp 的文件,并在 MainActivity 中调用它。 ```cpp #include <jni.h> #include <string> extern "C" JNIEXPORT jstring JNICALL Java_com_example_myapplication_MainActivity_stringFromJNI( JNIEnv* env, jobject /* this */) { std::string hello = "Hello from C++"; return env->NewStringUTF(hello.c_str()); } ``` 然后,在 MainActivity 中调用该函数: ```java public class MainActivity extends AppCompatActivity { static { System.loadLibrary("mylib"); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView tv = findViewById(R.id.sample_text); tv.setText(stringFromJNI()); } public native String stringFromJNI(); } ``` 这样就完成了 Android Studio 中配置 C++ 编译环境的过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值