据我所知,Android NDK中两种支持的ARM体系结构之间的区别仅在于支持的CPU指令集。真的是这样吗?调用约定,系统调用序列或其他内容没有区别吗?
我想知道如果我将模块编译为ARM对象文件(使用NDK以外的编译器 - 特别是Free Pascal),将ARMv6指定为架构,然后将其链接到armeabi和armeabi-v7a会发生什么共享库。除了通过我自己的基于C的接口外,FPC位不应该执行系统调用和Java调用。
编辑:一个hello world库,使用FPC for ARM编译,链接并在ARMv7a仿真器下运行。
答案 0 :(得分:7)
您绝对可以在v7上运行armeabi共享库,并且可以从其他模块调用其导出的函数。所以,为了安全起见,我会从你的Pascal代码创建一个单独的.so
文件,坚持armeabi(可能有一些C / C ++包装器),并将这个共享库与你的armeabi和armeabi-一起使用v7a图书馆。以正确顺序加载所有内容的最简单方法是使用
System.loadLibrary("pascal"); // armeabi
System.loadLibrary("c++"); // the platform will choose armeabi or armeabi-v7a