0%

nginx交叉编译问题

基于buildroot框架进行的交叉编译,首先拷贝官网buildroot包,然后拷贝里面的nginx的脚本配置。然后运行make nginx

以下是前段时间编译nginx遇到的一些问题:

1. checking for C compiler … found but is not workong

这个主要是测试C编译器的, 在编译机器上肯定不能执行。 我们修改一下auto/cc/name下的配置,设置ngx_feature_run=no。

2. can not detect int size

原因跟1一样, 直接修改auto/types/sizeof 设置ngx_size=4

3. checking for PCRE library … not found

依赖PCRE, 需要首先编译PCRE, 在make menuconfig 选择pcre。 如果没有,需要拷贝pcre相关的脚本 进行编译。

4. the HTTP XSLT module requires the libxml2/libxslt

同理,需要编译libxslt

5. Could not find libxml2 anywhere, check ftp://xmlsoft.org/

这个是由于我执行了make clean, host下依赖包都卸载了, 需要重新编译libxml2

6. checking for GD library …objs/autotest.c:4:10: fatal error: gd.h: No such file or directory

需要编译gd

7. checking for GeoIP library …objs/autotest.c:4:10: fatal error: GeoIP.h: No such file or directory

需要编译geoip

8. xxx-gcc: Error: unsafe header/library path use in cross-compilation: ‘-I’ ‘/usr/include/libxml2’

在添加头文件的目录时, 在目录前面添加${STAGING_DIR}

9. src/core/ngx_spinlock.c:47:2: error: #error ngx_spinlock() or ngx_atomic_cmp_set() are not defined !

需要编译libatomic_ops。 修改auto/lib/conf run=no

10. src/os/unix/ngx_errno.c:37:31: error: ‘NGX_SYS_NERR’ undeclared(first use in this function); did you mean ‘NGX_LOG_ERR’?

出错的原因仍然是因为交叉编译程序无法本地运行,手动在auto/linux下增加

1
2
3
4
5
6
7
8
9
if [$ngx_found = no]; then
cat << END >> $NGX_AUTO_CONFIG_H
#ifndef $ngx_feature_name
#define $ngx_feature_name 132
#endif

END
fi

具体的值可以看一下errno.h的宏

11. undefined reference to gdImageCreateFromJpegPtr

gd版本升级 2.2.5 –> 2.3.0

12. /usr/bin/install: cannot stat package/nginx/nginx.logrotate: No such file or directory

这个是目录错误了, 修改ngxin.mk。 相关package/xxx修改为$(BR2_EXTERNAL_PATH)/package/xxx

OK, 差不多就是这些问题, 然后就编译出了nginx包了。

行动,才不会被动!

欢迎关注个人公众号 微信 -> 搜索 -> fishmwei,沟通交流。