我已经向Android移植了一些有用的免费/开源工具。一个是Octave,另一个是gnuplot。他们齐心协力,为Matlab提供免费(如语音)和免费(如啤酒)的功能。我以有趣的方式将它们打包在应用程序中。具体地,
1)我在libs / armeabi目录中包含可执行文件和共享库。由于android命名约定,必须给他们有趣的名字。
2)我创建目录bin
/和mylib/
。我给他们完全的权限。
3)我创建了从bin/
到解压缩的lib/
目录中的可执行文件的链接。我给他们正确的名字和完整的权限。
4)我创建了从mylib/
到解压缩的lib/
目录中的共享库的链接。我给他们正确的名字和完整的权限。
5)然后我使用ld-linux.so.3
,它是mylib/
目录中的一个库,--library-path
选项指向mylib/
目录以启动可执行文件来自Android终端模拟器。
Octave在所有版本的Android中完美地运行,但是当我在仅运行Jelly Bean时尝试启动时,gnuplot会出现此错误:
error while loading shared libraries: gnuplot: failed to map segment
from shared object: Operation not permitted.
那么,为什么我会以同样的方式为这两个可执行文件之一出现此错误?为什么只在果冻豆?另外,在JB上,如果我让自己成为超级用户,那么一切都会再次运作。
有关如何调试的任何想法?我已经确认所有文件都在那里并拥有我打算拥有的权限。
请帮忙。如果你这样做,你会帮助一个免费的,开源的,教育性的和有用的应用程序。
答案 0 :(得分:0)
问题在于如何编译可执行文件。它们需要使用适当支持更新的arm设备的交叉编译器进行编译。我使用的编译器生成的可执行文件只能在arm设备的子集上工作。问题不在于android的不同版本。