从Linux移植到Android遇到的

时间:2023-01-01 16:35:51

前段时间,公司需要把一份Windows下的代码在Android设备上跑起来,个人花了个把月的时间终于憋出这个任务。


在移植的过程中遇到了无数的问题,现在把其中部分问题列出供有需要的人参考。


问题并不是个人解决的,都是从Internet查到的资源,有些有链接,有些没有链接,供大家一看。


问题 1.
问题描述:
try{} catch(...){}   error: exception handling disabled, use -fexceptions to enable. Android 平台移植过程中,在用NDK编译buffer.cpp文件时出现error: exception handling disabled, use -fexceptions to enable。
解决方法 : 
此问题的出现是编译器的异常异常捕获被禁用了,需要在Android.mk文件中开启。在Android.mk文件中添加:LOCAL_CPPFLAGS += -fexceptions就可以了。或者在Application.mk文件中添加APP_CPPFLAGS += -fexceptions

也是可以的。

问题链接:问题CSDN链接


问题2.
问题描述:
external/stlport/stlport/stl/_new.h:47:50: fatal error: libstdc++/include/new: No such file or directory
Result:  libstdc++          ---      bionic/

external/opencv2/core/include/opencv2/core/core.hpp:56:21: fatal error: algorithm: No such file or directory
Result:  libstlport          ---      external/stlport/stlport/

external/opencv2/flann/src/precomp.hpp:5:19: fatal error: cstdarg: No such file or directory
    
external/opencv2/flann/include/opencv2/flann/any.h:248:39: error: cannot use typeid with -fno-rtti

解决方法:
Result:LOCAL_CPPFLAGS += -frtti



问题3.
问题描述:
must #include <typeinfo> before using typeid

解决方法: use gnu_libstdc++
PREBUILT_STDCXX_PATH := prebuilts/ndk/current/sources/cxx-stl/gnu-libstdc++

LOCAL_C_INCLUDES := \     
     $(PREBUILT_STDCXX_PATH)/include \
     $(PREBUILT_STDCXX_PATH)/libs/$(TARGET_CPU_ABI)/include/ \

LOCAL_LDFLAGS += -L$(PREBUILT_STDCXX_PATH)/libs/$(TARGET_CPU_ABI) -lgnustl_static \



问题描述:./system is readonly
解决方法:
# mount
rootfs / rootfs ro,relatime 0 0
tmpfs /dev tmpfs rw,seclabel,nosuid,relatime,mode=755 0 0
......
/dev/block/by-name/system /system ext4 ro,seclabel,relatime,data=ordered 0 0
/dev/block/by-name/cache /cache ext4 rw,seclabel,nosuid,nodev,noatime,nomblk_io_submit,data=ordered 0 0
......
#mount -o remount /dev/block/by-name/system
#mount 
rootfs / rootfs ro,relatime 0 0
tmpfs /dev tmpfs rw,seclabel,nosuid,relatime,mode=755 0 0
......
/dev/block/by-name/system /system ext4 rw,seclabel,relatime,data=ordered 0 0
/dev/block/by-name/cache /cache ext4 rw,seclabel,nosuid,nodev,noatime,nomblk_io_submit,data=ordered 0 0
......

问题描述:
target Executable: faceDetect (out/target/product/a33-qy430/obj/EXECUTABLES/faceDetect_intermediates/LINKED/faceDetect)
/home/wangben/code/android/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7/bin/../lib/gcc/arm-linux-androideabi/4.7/../../../../arm-linux-androideabi/bin/ld: warning: hidden symbol 'atexit' in out/target/product/a33-qy430/obj/lib/crtbegin_dynamic.o is referenced by DSO external/opencv2/lib/libopencv_highgui.so
/home/wangben/code/android/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7/bin/../lib/gcc/arm-linux-androideabi/4.7/../../../../arm-linux-androideabi/bin/ld: error: treating warnings as errors

解决方法:
LOCAL_LDFLAGS += -Wl,--no-fatal-warnings