打算将一个大型的c++项目移植到安卓,考虑使用ndk生成.so文件,再在AndroidStudio里面调用

WWWsWWWs 2018-02-26 03:40:34
需要将开源入侵检测(C++)项目snort移植到Android中,在linux环境下搭建了ndk,已经能用ndk-build将简单.c文件生成,so,但snort项目里面包含太多的.cc,.h,.text,.cmake等文件,能用ndk直接一次性编译整个snort文件夹让他生成一个snort.so文件吗,如果不能的话需要将包里面每个.cc文件都编译一遍,然后再打包起来?想的我头发都掉光了,在网上还看到了用arm -gcc编译的,如果不用ndk的话,用arm gcc能行得通吗 急切希望大神来解答
...全文
1341 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaohuh421 2018-03-01
  • 打赏
  • 举报
回复
编译过, 是指没有语法错误. 也可以说是生成so吧. daq包肯定也需要在android系统中安装的.
WWWsWWWs 2018-03-01
  • 打赏
  • 举报
回复
引用 10 楼 xiaohuh421 的回复:
这种移植本身就是需要花大量时间与精力的. 如果你原来的c++项目就是在liunx环境下的, 还好一点. 如果不是, 那么要做的工作更多. 还有就算是liunx环境, 不同系统版本, 也可能有很大不同. android更是奇葩, 各种定制,阉割rom. 所以要移植到android中. 可以把整个项目的cpp放到AS中的cpp文件夹下, 然后在MakeList中添加一下路径等配置. 然后看能否编过. 能编译过, 再考虑接口问题. 接口肯定是重写了, 如果对外的接口非常多, 比如说有几千个, 那么你悲剧了. 不能一步登天.
请问 能否编过在这里是什么意思呢 是指生成了.so文件?还是其他什么?刚接触这方面不太了解,还有庆幸的是要移植的c++项目就是在linux下的,但是项目的运行还需要再linux环境下搭建环境,比如安装daq等几个必要的包,那这几个包要如何处理呢?直接不用管他?还是也要放进AS里面进行编译?麻烦您了
xiaohuh421 2018-02-28
  • 打赏
  • 举报
回复
这种移植本身就是需要花大量时间与精力的. 如果你原来的c++项目就是在liunx环境下的, 还好一点. 如果不是, 那么要做的工作更多. 还有就算是liunx环境, 不同系统版本, 也可能有很大不同. android更是奇葩, 各种定制,阉割rom. 所以要移植到android中. 可以把整个项目的cpp放到AS中的cpp文件夹下, 然后在MakeList中添加一下路径等配置. 然后看能否编过. 能编译过, 再考虑接口问题. 接口肯定是重写了, 如果对外的接口非常多, 比如说有几千个, 那么你悲剧了. 不能一步登天.
WWWsWWWs 2018-02-27
  • 打赏
  • 举报
回复
引用 8 楼 cxz003 的回复:
[quote=引用 6 楼 WWWsWWWs 的回复:] [quote=引用 5 楼 cxz003 的回复:] 不过CMakeLists.txt里面貌似是要把文件列一下的。。 没搞过这么复杂的。。
直接在AS里面用jni调用的话 好像还要改C++代码的方法名吧,比如把showhello改成java_com_233_helloword_showhello等等这样一改就又要改好多地方。。因为不是太懂C++的知识,所以就害怕要改snort的代码。。就想能不能用.so库来解决。。[/quote]这样修改是为了给Java代码调用的 C++内部代码不用变[/quote] snort程序的运行还需要daq等其他六个包的支持,我在想能否直接用arm-linux-gcc编译成可执行程序,然后把所有的包都push到Android中去,直接在手机中运行(我是不是有点异想天开了
  • 打赏
  • 举报
回复
引用 6 楼 WWWsWWWs 的回复:
[quote=引用 5 楼 cxz003 的回复:] 不过CMakeLists.txt里面貌似是要把文件列一下的。。 没搞过这么复杂的。。
直接在AS里面用jni调用的话 好像还要改C++代码的方法名吧,比如把showhello改成java_com_233_helloword_showhello等等这样一改就又要改好多地方。。因为不是太懂C++的知识,所以就害怕要改snort的代码。。就想能不能用.so库来解决。。[/quote]这样修改是为了给Java代码调用的 C++内部代码不用变
rightorwrong 2018-02-26
  • 打赏
  • 举报
回复
看能对接口进行封装吗,使用jni方式
WWWsWWWs 2018-02-26
  • 打赏
  • 举报
回复
引用 5 楼 cxz003 的回复:
不过CMakeLists.txt里面貌似是要把文件列一下的。。 没搞过这么复杂的。。
直接在AS里面用jni调用的话 好像还要改C++代码的方法名吧,比如把showhello改成java_com_233_helloword_showhello等等这样一改就又要改好多地方。。因为不是太懂C++的知识,所以就害怕要改snort的代码。。就想能不能用.so库来解决。。
  • 打赏
  • 举报
回复
不过CMakeLists.txt里面貌似是要把文件列一下的。。 没搞过这么复杂的。。
  • 打赏
  • 举报
回复
引用 3 楼 WWWsWWWs 的回复:
[quote=引用 1 楼 cxz003 的回复:] 现在AS集成了C++的编译环境 你试试创建一个带C++的项目 然后把C++代码放里面试试 以上是基于本人少量混合编程的经验下发表的猜想型建议 仅供参考
snort包里有几百个包几万行代码。。一个一个往里放工作量是不是太大了·· [/quote] 会生成一个cpp文件夹 copy里面就行了
WWWsWWWs 2018-02-26
  • 打赏
  • 举报
回复
引用 1 楼 cxz003 的回复:
现在AS集成了C++的编译环境 你试试创建一个带C++的项目 然后把C++代码放里面试试 以上是基于本人少量混合编程的经验下发表的猜想型建议 仅供参考
snort包里有几百个包几万行代码。。一个一个往里放工作量是不是太大了··
WWWsWWWs 2018-02-26
  • 打赏
  • 举报
回复
snort包里有几百个包几万行代码。。一个一个往里放工作量是不是太大了··
  • 打赏
  • 举报
回复
现在AS集成了C++的编译环境 你试试创建一个带C++的项目 然后把C++代码放里面试试 以上是基于本人少量混合编程的经验下发表的猜想型建议 仅供参考
本数据集来源于 2024 年 7 月在江西省中东部余干县、贵溪市、金溪县丘陵林地采集的千枚岩、红砂岩、花岗岩母质发育红壤关键带剖面土壤实测数据,空间覆盖 3 个县域不同岩性风化壳林地,采样点位经纬度分别为千枚岩剖面 P10(116.8316°E,28.5269°N)、红砂岩剖面 P08(117.1048°E,28.3492°N)、花岗岩剖面 P04(116.6883°E,27.9963°N);垂直空间采样深度存在差异,千枚岩与花岗岩剖面采样深度 0~600 cm,红砂岩剖面采样深度 0~450 cm,垂直分层采样分辨率为 0~50 cm 区间分 0~20 cm、20~50 cm 两层,50 cm 以下土层以 50 cm 为固定间隔分层,整套数据集共包含 36 条土壤剖面分层记录,其中 P10 千枚岩剖面 13 条、P08 红砂岩剖面 11 条、P04 花岗岩剖面 13 条。数据采集时间为 2024 年 7 月,实验室理化指标、矿物测试、酸碱滴定及统计建模工作于 2024 年 7 月 —2026 年 5 月完成,无时间序列连续监测数据,仅为单次野外剖面采样静态数据集。 数据集包含野外剖面基础信息、土壤酸碱滴定原始数据、土壤酸度指标、交换性盐基与交换性酸、土壤机械组成、有机质、黏土与原生矿物半定量 XRD 数据、无定形 / 晶形铁铝氧化物含量。全量理化指标计量单位统一规范:酸缓冲容量 pHBC 单位为 cmol・kg⁻¹・pH⁻¹,交换性酸、交换性盐基离子单位为 cmol・kg⁻¹,矿物以质量百分比(%)表示,、黏粒 / 粉粒 / 砂粒、有机质、铁铝氧化物单位均为g/kg,pH 为无量纲数值。 覆盖范围: 中位纬度: 28.2616 中位经度: 116.89654999999999 南界纬度: 27.9963 西界经度: 116.6883 北界纬度: 28.5269 东界经

80,488

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧