【问题标题】:using eigen with android ndk使用 eigen 和 android ndk
【发布时间】:2012-01-18 03:28:53
【问题描述】:

有人用ndk成功导入了eigen库吗?我正在考虑使用它为我正在开发的应用程序执行所有数学矩阵运算。我发现一些人在一些论坛中提到了它,但除了我不知道他们是否成功地让它工作之外,我阅读的大多数论坛开始提到一些与霓虹灯代码相关的错误......我没有搞砸之前。

如果有人可以向我指出如何使用 ndk 编译像 eigen 这样的现有库的教程,那将非常有帮助。这样我以后就可以自己做。我刚刚发现了这个:http://code.google.com/p/android-cmake/ 并想尝试自己实现它,但不知道从哪里开始。显然,我前面有一些半密集的阅读,所以我会开始阅读,但如果有人可以加入并帮助编译用于 ndk 的本机库,我将不胜感激。

【问题讨论】:

  • 所以在玩了一点 cmake 之后,我还没有得到任何要编译的东西,主要是因为我不确定如何使用命令行来设置变量,就像它在教程中所说的那样。对于一些不是狂热的命令行用户的人,我不得不说,android-cmake 中包含的那些教程在描述如何设置时真的很模糊。作者假设您已经知道如何使用所有内容,并省略了很多细节。我在寻找有关使 eigen 工作的文档时也发现了这一点:bitbucket.org/erublee/eigen-android。看起来很有希望
  • Eigen 只是头文件,不需要编译。 cmake 脚本只编译测试并创建 doxygen 文档。
  • 嘿,感谢您的评论 :) 那么我将如何将 Eigen 与 ndk 一起使用。我是否只是将 eigen 源代码复制到我的 android 项目中 jni 文件夹中的某个位置,然后复制我在 android.mk 或 application.mk 文件中使用的名称?如果这就是它的工作原理,我必须在我的 mk 文件中声明什么。如果你不能告诉我不完全是命令行或 gnu guru ;) 所以我在 ms visual studio 或 ide 之外做任何事情的知识是有限的。
  • 只需使用 -I ( -I/path/to/eigen ) 将包含目录添加到编译器

标签: android c++ cmake android-ndk eigen


【解决方案1】:

我以前从未使用过 Android NDK,我在物理中使用 Eigen 进行数值计算。

Eigen 只是标题,所以你可以把它放在你喜欢的任何地方。您只需设置该文件夹的包含路径(可能在您的 Android.mk 中)。如果您不需要 Eigen 中不受支持的库,那么您只需要“Eigen”文件夹。其余的仅用于文档和测试。 简要查看文档后,我认为您可以使用

LOCAL_C_INCLUDES := path/to/eigen

在您的 Android.mk 中

一个快速而肮脏的解决方案是将 Eigen 放入“jni”文件夹中。但这只有在所有使用 Eigen 的源都在那里的情况下才有效。这样您就不必编辑您的 Android.mk。

【讨论】:

  • :) 好的,我很确定我明白了。所以在我尝试这个之前我会很快地由你运行这个......所以在我的make文件中我只是声明在我的构建中包含特征库文件?我知道我必须#include 我计划使用的任何标题,但我只是不确定如何确保实际的特征源文件最终出现在我的项目中,以便我可以使用它们。我不介意你提到的快速和肮脏,因为整个 eigen 库只有 1.8 mb 左右,所以我可以剪掉任何我不需要的东西,比如测试和东西。
  • 当您的代码中有 #include 时,预处理器会搜索此文件并将其内容粘贴到您的代码中。预处理器在您的本地文件夹及其搜索路径中的每个文件夹中查找该文件。您不需要在 makefile 中指定 Eigen 文件,因为它们不会被编译。你只需要确保预处理器找到它们。
  • 嘿,非常感谢 :) 你的建议确实让我明白了我应该做些什么来让事情正常进行。当我把它放在一起并看到它工作时,我会用我所做的一切来让它在我的应用程序中运行:)
  • 所以我终于通过将 Eigen 文件直接导入我的 jni 文件夹来让 ndk 注意到库。不完全是我想要的方式,但它确实有效。现在我只需要清理我时髦的 c++ 代码就可以了 :)
【解决方案2】:

我更喜欢将 Eigen 标头 在 Eclipse 工作区之外,就像 stl 等一样。为此,解压缩 Eigen 下载并将文件夹“Eigen”复制到您选择的目录中:

/Users/foo/libraries/eigen/Eigen

然后,在项目的 Android.mk 文件中,告诉 ndk-build Eigen 包含文件在哪里:

LOCAL_C_INCLUDES += /Users/foo/libraries/eigen

这里不要引用实际的“Eigen”文件夹,引用它上面的文件夹,否则包含将不起作用。最后,告诉 eclipse 索引器包含的内容:

右键单击您的项目 -> 属性 -> C/C++ 常规 -> 路径和符号 -> 包含 -> GNU C++ -> 添加... -> 文件系统... -> 再次将其指向 /Users /foo/libraries/eigen

完成。

【讨论】:

    猜你喜欢
    • 2012-01-22
    • 1970-01-01
    • 1970-01-01
    • 2018-01-08
    • 2019-11-08
    • 2018-01-04
    • 1970-01-01
    • 2011-08-06
    • 2015-08-28
    相关资源
    最近更新 更多