Android NDK - 附加包含目录

2024-02-13

我正在使用 Android NDK 构建共享库。我包含了 Android.mk 文件中的一个片段,该片段给我带来了一些问题。

LOCAL_PATH := $(call my-dir)

..#other module here
..#other module here

include $(CLEAR_VARS)
LOCAL_MODULE    := spatialite
LOCAL_C_INCLUDES := ../../../projects/externalappsdk/include
LOCAL_SRC_FILES := sqlite3.c \
spatialite.c
include $(BUILD_SHARED_LIBRARY)

我的 spaceite.c 文件包含一些位于应用程序项目文件夹外部的文件夹中的头文件。我已将该文件夹包含在 LOCAL_C_INCLUDES 中,如上所示,但在运行 ndk-build 时,它仍然无法找到这些包含。允许 ndk-build 命令识别这些包含文件所在位置的正确方法是什么?任何帮助将不胜感激。

UPDATE:

我想补充一点的是,spatialite 本身不需要对 Java 层可见。此后我将构建另一个使用 spaceite 的模块。我不确定这是否会对我在 Android.mk 文件上声明模块的方式产生影响。

编译器输出如下所示: jni/spatialite.c:102:20: 致命错误: geos_c.h: 没有这样的文件或目录 #包括

在spatialite.c 中导入的.h 文件位于C:/projects/externalappsdk/include。 Spatialite.c 和 Android.mk 位于 C:/mobile/myandroidproject/jni/

我的 spaceite.c 文件中的 include 指令如下所示:

#ifndef OMIT_GEOS   /* including GEOS */
#include <geos_c.h>
#endif

回答: 我设法利用克里斯提供的答案的帮助来完成这项工作,我已经接受了这个答案。但是,我必须对 Android.mk 文件进行一项更改,如下所示:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := spatialite
LOCAL_C_INCLUDES := ../../projects/externalappsdk/include
LOCAL_SRC_FILES := sqlite3.c \
spatialite.c
include $(BUILD_SHARED_LIBRARY)

请注意,LOCAL_C_INCLUDES 返回两级而不是三级。


没有

LOCAL_PATH := $(call my-dir)

在 Android.mk 的顶部,我无法按照描述构建项目的副本,但是错误与您的报告不同 - 如果没有该指令,编译器将在 NDK 系统目录中搜索 C 源文件,而不是在jni/ 文件夹。

$ cd mobile/myandroidproject/jni
$ ndk-build
Compile thumb  : spatialite <= spatialite.c
SharedLibrary  : libspatialite.so
Install        : libspatialite.so => libs/armeabi/libspatialite.so

文件:./mobile/myandroidproject/jni/Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := spatialite
LOCAL_C_INCLUDES := ../../../projects/externalappsdk/include
LOCAL_SRC_FILES := sqlite3.c \
spatialite.c
include $(BUILD_SHARED_LIBRARY)

文件:./mobile/myandroidproject/jni/spatialite.c

#include <geos_c.h>

文件:./mobile/myandroidproject/jni/sqlite3.c

//empty file

文件:./projects/externalappsdk/include/geos_c.h

//empty file

至少您应该将 LOCAL_PATH 行添加到您的 Android.mk

如果这不能解决问题,那么请更新您的问题,说明您的项目结构与我重新创建的项目结构之间的任何差异。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android NDK - 附加包含目录 的相关文章

随机推荐

  • 为什么结构中的 Box 需要“显式生命周期限制”?

    编者注 此代码在之后不再产生相同的错误RFC 599 https github com rust lang rfcs blob master text 0599 default object bound md已实施 但答案中讨论的概念仍然有
  • 使用 Angularjs 加载文本的 Bootstrap 按钮

    在使用 bootstrap 和 jquery 的非角度应用程序中 我可以创建如下按钮
  • http://timestamp.geotrust.com/tsa 是否不再可用于 SignTool?

    我们在构建服务器上签署可执行文件 突然构建服务器无法构建并给出错误 SignTool 错误 无法到达指定的时间戳服务器或返回无效响应 将时间戳服务器更改为后http sha256timestamp ws symantec com sha25
  • 使用“printf”返回字符串,而不是打印它

    这可能听起来很奇怪 但事实就是如此 我喜欢使用这种在 php 中构建字符串的技术 printf This is 1 s this is 2 s myFunction1 myFunction2 显然 每当调用函数时 这都会直接打印结果 但我想
  • 有没有办法在Windows中模拟LD_LIBRARY_PATH?

    我有一个程序可以做一些图形 当我以交互方式运行它时 我希望它使用系统中的 OpenGL 来提供硬件加速图形 当我批量运行它时 我希望能够将其重定向以使用 Mesa GL 库 以便我可以使用 OSMesa 功能渲染到屏幕外缓冲区 如果选择了批
  • 如何在 VBA 2010 上导出图像之前裁剪图像

    我有一个子例程可以很好地导出从 Excel 中的某个范围内获取的图像 但我遇到了一个问题 即使我设法使图表对象透明并且没有边框 导出的图像有一个我希望在导出之前裁剪很多未使用的区域 Sub BtnSaveFile Click Dim RgE
  • 努力在 Glassfish 上创建 MySQL 连接池

    我以前已经这样做过 但由于某种原因 我在创建这个连接池时确实遇到了一些困难 当我在创建连接池后 ping 连接池时 出现以下错误 Ping Connection Pool for bondsaver is Failed Ping faile
  • 远程连接 Neo4j 服务器

    我相信创建远程连接的方法是更改 此行conf neo4j server properties 特别是删除注释并重新启动服务器 org neo4j server webserver address 0 0 0 0 我的网址是https 0 0
  • 启动 Nexus docker 镜像时如何设置管理员用户/密码

    当在 Nexus 2 docker 镜像中启动时 https hub docker com r sonatype nexus https hub docker com r sonatype nexus 如何配置它以将默认管理员用户密码更改为
  • 在 Clojure 中搜索 xml

    我有以下示例 xml
  • 有没有办法在 Protractor 测试中绕过 Chrome 地理定位对话框?

    在使用量角器自动化应用程序时 我遇到了这个问题 打开主页后 我会看到带有 阻止 允许 按钮的地理位置对话框 如果不选择任一选项 该对话框就无法继续 事实证明 这个对话框不是警报的实例 这就是为什么browser switchTo alert
  • 新 Activity 的 onStart 在父 Activity 的 onStop 之前调用

    我有一份申请 我用startActivity 开始活动 谁能真正告诉我为什么系统会调用onStart 首先是新 Activity 而不是父活动onStop 这可能吗 没有系统错误 我找到了在 onStart 之后直接调用 Fragment
  • 从文件生成频率表

    给定一个每行包含一个数字的输入文件 我如何计算某个项目在该文件中出现的次数 cat input txt 1 2 1 3 1 0 期望的输出 gt 1 3 1 1 cat output txt 0 1 1 3 2 1 3 1 如果该解决方案也
  • Postgres SELECT 数组中的值

    我有一个看起来像这样的 postgres 表 缩短 id serial col1 character varying 1 Life Health VA Data 我正在尝试执行以下操作 SELECT FROM mytable WHERE L
  • 析构函数的执行顺序?

    我知道c 中的析构函数没有执行顺序 我在几个类中使用以下结构 它是为了破坏实例和静态信息 public class MyClass private static readonly Destructor DestructorObject ne
  • =importXML() 中的 xpath 用于提取元描述

    我正在尝试使用 Xpath 使用 Google Sheets 从网页中提取元描述 我正在努力提取标题 importXml www example com title 以下是我的两个学习来源 http seogadget co uk play
  • 简单 MySQL 子查询性能

    考虑 2 个 MySQL 查询 SELECT ue userid e courseid FROM SELECT id courseid FROM mdl enrol WHERE status 0 AND courseid IN 46 e I
  • 使用 ADO .NET 调用 SQL 函数

    我想要在 SQL Server 中创建调用函数 它接收两个参数并返回一个整数 当我调用存储过程时 我使用以下代码 sqlcmd CommandType CommandType StoredProcedure sqlcmd CommandTe
  • C 或 C++ 中乘法和除法的较高部分?

    当我在汇编中将一对 4 字节整数相乘时 结果的较低部分在 EAX 中 较高部分在 EDX 中 如果我使用 C 或 C 并且我想获得更高的部分 是否可以不使用内联汇编 是否可以以同样的方式从 EAX 获得整数除法结果 从 EDX 获得模数结果
  • Android NDK - 附加包含目录

    我正在使用 Android NDK 构建共享库 我包含了 Android mk 文件中的一个片段 该片段给我带来了一些问题 LOCAL PATH call my dir other module here other module here