嵌入式相关的工作,可以说是惜内存如金,我们有时候编译的可执行程序会很大,今天我也遇到这方面的问题以及解决办法,分享给大家。
现在做的项目是在arm板上用Boa搭建web服务器,然后cgi来调用一些功能。
以下是一个简单的cgi例子:
#include <stdio.h>
int main()
{
printf("Content-type: text/html\n\n");
printf("<html>\n");
printf("<head>\n");
printf("<title>my page</title>\n");
printf("</head>\n");
printf("</HTML>\n");
return 0;
}
用 arm-linux-gcc -o hello.cgi hello.c 编译,启动Boa后
在pc机上的浏览器里面不能正确浏览,提示错误:
502 bad gateway
The CGI was not CGI/1.1 compliant.
查看 log
unable to find LFLF
在网上找了下,解决方法:arm-linux-gcc -static -o hello.cgi hello.c ,我试过,是可以的。
但是,由于是静态,就一个hello.cgi 就有1.4M,我的硬件资源可耗不起哦。
后来经过从网上前辈的经验,发现以下是减少编译后文件大小的方法:
1、静态编译完了 再 arm-linux-strip 一下可以缩小!
2、更改boa 源代码里的src/下的 cgi.c中加入 my_add_cgi_env(req, "LD_LIBRARY_PATH", "/lib");加到 complete_env 函数中就可以了,注意:/lib自己定义自己动态库所在路径
最终总结:
两个结合来使用时最好的,调用动态库成功后,再strip一下,达到最佳效果。
以上内容是我从网上搜的一些内容,以及自己的理解和一些感悟,希望对大家有帮助。