交叉编译nginx-1.0.11

3
我想知道如何交叉编译nginx-1.0.11。
我已经尝试了:--with-cc选项,但是出现错误:检查C编译器...已找到,但不起作用。
./configure: error: 找不到C编译器arm-linux-gcc。
--with-cc-opt 也不起作用。我还试图手动更改编译器(通过更改Makefile)。
我已经安装了arm-linux-gcc,并且它在openssl上运行良好(它成功地交叉编译了openssl,因此问题不在于arm-linux编译器)。
非常感谢任何帮助......提前致谢。 :)

应该针对unix.stackexchange.com(可能)进行目标定位。 - Chris J
你安装了交叉编译器吗?如果你没有'arm-linux-gcc',那么你需要它。 - fazo
5个回答

1

听起来你是建议在与目标兼容的系统上进行构建。 - Chris Stratton
确切地说,有时候我发现与其设置交叉编译器、交叉编译系统库等等,直接做会更容易些。 - Ash

1
我只是按照这种方式构建了版本1.4.7。
./configure --with-ld-opt=-L/path/to/libfolder \
   --with-cc-opt=-I/path/to/include  --prefix=./nginx
make CC=arm-linux-gnueabi-gcc
make install

--prefix nginx 将所有内容安装在 ./nginx 中,只需将创建的 nginx 文件夹移动到设备上,但必须从相对路径启动服务器。
./nginx/sbin/nginx

你有什么话要说吗? - Tom Fenech
在路径前面的-L和-I是什么意思? - trigster
1
@trigster 对于我正在使用的 GCC 编译器,我正在使用一个标志来搜索库文件。https://gcc.gnu.org/onlinedocs/gcc/Directory-Options.html#Directory-Options - Luka Rahne

1

我成功地进行了nginx的交叉编译,首先在我的台式机上创建了一个配置文件(./configure --without-pcre --without-http_rewrite_module),然后只需编辑/objs/Makefile中的'cc'命令,使其指向正确的gcc。配置生成的Makefile非常简单。确保你的所有环境变量也设置正确(CC、LD、LIBS等)。


我还没有时间去研究Yocto,而且重写模块目前对我来说也不是必需的,这是一个非常好的解决方法。谢谢! - Isaac

1

没有简单的答案。nginx有自己的非自动配置系统,目前不支持交叉编译。

要么对配置系统进行修改,要么避免使用它,要么等待nginx添加对交叉编译的支持。

请参阅http://forum.nginx.org/read.php?29,220607,最近讨论了该问题。


1

我在我的ia32 Linux主机上运行了./configure,并构建了它(以确保它可以正常工作),然后: 1)删除所有对象文件, 2)编辑objs/Makefile以更改CC的值,添加编译器的包含路径和链接器的库路径, 3)将一些头文件从/usr/include复制到本地目录。

问题在于,如果/usr/include在搜索路径中,那么会在编译器的头文件之前进行搜索。当x86汇编指令被拉入到htonl()的定义中时,这就成为了一个问题。

另一种选择是修改conf/cc/gcc来添加选项并在那里进行配置,包括支持CROSS的shell变量。我还没有这样做。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接