记录termux编译安装nginx遇到的错误-搞不定求帮助

751 阅读2分钟

image.png

termux是有nginx的,但是我想要添加一个rtmp的模块,所以需要自己编译添加模块

编译环境

image.png

  • termux版本:二开版本zeroTermux-0.117.13
  • nginx: 1.6.3
  • nginx-rtmp-module: 1.2.2
  • openssl: 1.0.2u
  • pcre: 8.39
  • zlib: 1.2.11

问题

GCC

一开始是遇到GCC问题

configure检查无法检测到GCC

后面我就安装了GCC了:安装教程

结果没有用上就很尴尬

宏定义错误

这个就是上面图片的错误,这个错误一直存在,百度了好多篇都没用,最后一篇在这里,但是不知道为什么我进去好难这里

src/event/modules/ngx_epoll_module.c:401:6: error: token is not a valid binary operator in a preprocessor subexpression
#if (NGX_READ_EVENT != EPOLLIN|EPOLLRDHUP)
     ^~~~~~~~~~~~~~
src/event/ngx_event.h:400:29: note: expanded from macro 'NGX_READ_EVENT'
#define NGX_READ_EVENT     (EPOLLIN|EPOLLRDHUP)
                            ^~~~~~~
/data/data/com.termux/files/usr/include/linux/eventpoll.h:28:36: note: expanded from macro 'EPOLLIN'
#define EPOLLIN (__force __poll_t) 0x00000001
                ~~~~~~~~~~~~~~~~~~ ^
src/event/modules/ngx_epoll_module.c:408:6: error: token is not a valid binary operator in a preprocessor subexpression
#if (NGX_WRITE_EVENT != EPOLLOUT)
     ^~~~~~~~~~~~~~~
src/event/ngx_event.h:401:28: note: expanded from macro 'NGX_WRITE_EVENT'
#define NGX_WRITE_EVENT    EPOLLOUT
                           ^~~~~~~~
/data/data/com.termux/files/usr/include/linux/eventpoll.h:30:37: note: expanded from macro 'EPOLLOUT'
#define EPOLLOUT (__force __poll_t) 0x00000004
                 ~~~~~~~~~~~~~~~~~~ ^
2 errors generated.
make[1]: *** [objs/Makefile:822: objs/src/event/modules/ngx_epoll_module.o] Error 1
make[1]: Leaving directory '/data/data/com.termux/files/home/code/ngnix/nginx-1.6.3'

里面提到了这样搞:我选择直接修改 eventpoll.h ,将报错中提到的宏常量前面的修饰删掉,这个报错解决。

这个确实可以搞定了,好用

werror

image.png

这是一个警告,但是被GCC当成了是错误,所以make就停下了

这个只要修改objs/Makefile 文件里面

image.png

把这个-Werror删除就可以了

image.png

或者使用./configure --help查看有没有--disable-werror

有一开始在configure最后面添加一个 --disable-werror

image.png

找不到符号 crypt

image.png

ld.lld: error: undefined symbol: crypt
>>> referenced by ngx_user.c:75 (src/os/unix/ngx_user.c:75)
>>>               objs/src/os/unix/ngx_user.o:(ngx_libc_crypt)

ld.lld: error: undefined symbol: glob
>>> referenced by ngx_files.c:366 (src/os/unix/ngx_files.c:366)
>>>               objs/src/os/unix/ngx_files.o:(ngx_open_glob)

ld.lld: error: undefined symbol: globfree
>>> referenced by ngx_files.c:411 (src/os/unix/ngx_files.c:411)
>>>               objs/src/os/unix/ngx_files.o:(ngx_close_glob)
clang-16: error: linker command failed with exit code 1 (use -v to see invocation)
make[1]: *** [objs/Makefile:264: objs/nginx] Error 1
make[1]: Leaving directory '/data/data/com.termux/files/home/code/ngnix/nginx-1.6.3'
make: *** [Makefile:8: build] Error 2

找不到符号 crypt 这个搞不定,😢 希望有大佬看到可以说一下是为什么

我已经转向向已经存在的nginx添加模块,还是要记得删除werror这个问题

这个在termux中就一个问题,也会出现

ld.lld: error: undefined symbol: crypt

但是只要把--with-ld-opt='-L/data/data/com.termux/files/usr/lib -Wl,-rpath=/data/data/com.termux/files/usr/lib -fopenmp -static-openmp -Wl,--enable-new-dtags -Wl,--as-needed -Wl,-z,relro,-z,now -landroid-glob'

最后面添加一个-lcrypt

变成这样就行了--with-ld-opt='-L/data/data/com.termux/files/usr/lib -Wl,-rpath=/data/data/com.termux/files/usr/lib -fopenmp -static-openmp -Wl,--enable-new-dtags -Wl,--as-needed -Wl,-z,relro,-z,now -landroid-glob -lcrypt'

最后

欢迎关注公众号致心空间:O(∩_∩)O😁

致心空间