| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> 移植LASP到嵌入式arm板(appweb7.2+php7.3.5) -> 正文阅读 |
|
[嵌入式]移植LASP到嵌入式arm板(appweb7.2+php7.3.5) |
编者按? ? ? ? ? 始于一次对朋友的帮忙,一时兴起,自觉移植LASP不是难事,不想竟耗时一个周末方才搞定。期间走了很多弯路,本着分享的初心,记录移植流程及疑难点。 ? ? ? ? 移植成果见资源: 移植步骤? 1.1 说明? ? ? ? 本次移植涉及的源码包括以下:
? ? ? ? appweb编译需openssl、php库; ? ? ? ? php编译需libz、libxml2、sqlite3、openssl、libiconv(用于支持spa的web展示) ? ? ? ? 编译前需先设置好交叉编译链工具,选用与根文件系统相同的交叉编译链是最好的了,否则可能出现依赖库不兼容的情况。本人编译根文件系统编译采用5.4版本,LASP编译采用7.4版本,运行时出现ld-2.25.so、libc-2.25.so等不兼容问题,最终替换l7.4版本sysroot下lib方可正常使用。 1.2 编译?zlib????????源码:http://www.zlib.net/
1.3?编译 sqlite? ? ? ? 源码:https://www.sqlite.org/download.html
1.4 编译 libxml2? ? ? ? 源码:http://xmlsoft.org/downloads.html
1.5?编译 libiconv? ? ? ? 源码:http://www.gnu.org/software/libiconv
1.6?编译 openssl?? ? ? ? 源码:https://www.openssl.org/source/?
1.7?编译 php??????????源码:?https://www.php.net/downloads.php? ????????配置项:目前主要支持openssl、libxml、libz、sqlite3、libiconv;
?1.8?编译 appweb??? ? ? ? 源码:https://www.embedthis.com/appweb/download.html ????????上述链接仅展示最新版,若要下载旧版,可在页面内跳转到github中下载指定tag版本。 ? ? ? ? 修改配置需要使用metoo工具,需要另行编译metool,此处直接对Makefile进行修改。对arm来说,实际调用的makefile是projects/appweb-linux-default.mk,我们直接对其进行修改即可。
?后记? 1.编译相关? ? ? ?1.1 编译方面,主要是php的编译耗费了太多时间和精力,配置项繁多,--enable? --with --without? dir等等搞的人不胜其烦。configure执行时会根据配置的依赖库路径、头文件、库文件等信息去判断、处理系统层级诸多信息,稍有配置错误,就会导致后续编译出错。 ? ? ? ? 另外,configure文件中有3处执行时总是有问题,故对这些内容记性了修改 ?修改如下: ? ? ? ? ? 若实在configure不过,可拷贝下载资源中提供的修改后的configure文件。 ????????LDFLAGS="-L/usr/local/arm/7.4.1/arm-linux-gnueabi/sysroot/lib/" ? ? ? ? 这一部分不是必须的,当时是使能了--enable-libgcc 后报找不到libgcc_s.so.1,才额外增加该配置。
????????configure后最好浏览下config.log,对新添加的配置部分着重查看、确认,如果存在error/no等信息,则需要解决,否则即使编译通过也会埋坑。 ? ? ? ? 如下图所示,configure中存在大量的、全面的符号、函数、数据类型等内容的处理,有些严重的会直接报错、有些则会屏蔽某些功能,或添加某些定义(如typedef数据类型) ? ? ? ? 编译后可通过查看Makefile、观察编译输出信息判断配置是否存在问题。
?????????1.2 appweb编译报__stack_chk_fail 未定义的引用 ? ? ? ? 本人在编译时未出现此类错误,但若出现此类错误,可在?projects/appweb-linux-default.mk中将-fstack-protector删掉即可。 ? 2.php+appweb?? ? ? ? 在新版appweb中是支持多线程模式的,其使用phpHandle7.c来处理php相关部分,它也要求php必须是线程安全的(--enable-maintainer-zts),这与以往有很大不同。php必须编译为zts版本。?appweb默认支持并发5个任务。为兼容旧有php项目,需要特殊设置为仅允许一个任务/线程,否则,旧项目开发时没有考虑到多线程的问题(全局变量临界资源等),则很容易导致appweb崩溃。在这一部分,排查问题耗费了一天的时间,经历了频繁崩溃、移植gdb、定位崩溃位置、确定多线程问题、修改源码中最大任务数值的一系列煎熬过程,才使得appweb+php正常工作。最后浏览src/config.c意外的发现可以通过配置文件设置最大任务数。 3.配置修改?????????appweb.conf:
????????install.conf:
????????php.ini:
4.成果
|
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 0:45:04- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |