1

我已将一些有用的免费/开源工具移植到 Android。一个是 Octave,另一个是 gnuplot。他们齐心协力,免费(如语音)和免费(如啤酒)提供类似 Matlab 的功能。我以一种有趣的方式将它们打包在应用程序中。具体来说,

1) 我在 libs/armeabi 目录中包含可执行文件和共享库。由于 android 命名约定,必须给他们取一个有趣的名字。

2)我创建目录bin/ 和mylib/. 我给他们完全的权限。

3)我bin/在解压lib/目录中创建指向可执行文件的链接。我给他们正确的名字和完整的权限。

4)我mylib/在解压lib/目录中创建指向共享库的链接。我给他们正确的名字和完整的权限。

5)然后我使用ld-linux.so.3哪个是现在目录中的库之一,以及指向mylib/目录的选项以从 Android 终端模拟器启动可执行文件。--library-pathmylib/

Octave 在所有版本的 Android 中都能完美运行,但当我尝试在仅运行 Jelly Bean 时启动它时,gnuplot 会出现此错误:

error while loading shared libraries: gnuplot: failed to map segment 
from shared object: Operation not permitted.

那么,为什么这两个可执行文件之一以相同的方式出现此错误?为什么只在果冻豆中?此外,在 JB 上,如果我让自己成为超级用户,一切都会再次起作用。

关于如何调试的任何想法?我已经确认所有文件都在那里,并且拥有我希望他们拥有的权限。

请帮忙。如果你这样做,你将帮助一个免费、开源、教育和有用的应用程序。

4

1 回答 1

0

问题在于如何编译可执行文件。它们需要使用正确支持较新的 arm 设备的交叉编译器进行编译。我使用的编译器生成的可执行文件只能在 arm 设备的子集上运行。问题不在于不同版本的android。

于 2014-08-21T18:45:31.923 回答