網(wǎng)站首頁 編程語言 正文
今天搞了一天,終于把nginx增加支持rtmp模塊編譯出來了,其中遇到了很多問題,記錄下這篇文章,希望可以幫到遇到此類問題的同學。
一、準備工作:
1,下載nginx源碼:wget http://xiazai.jb51.net/202112/yuanma/nginx_jb51.rar
2,下載依賴庫libpcre.a源碼:wget?http://ftp.cs.stanford.edu/pub/exim/pcre/pcre-8.39.tar.gz
3,下載依賴庫libz.a源碼:?wget? http://xiazai.jb51.net/202112/yuanma/pcre_jb51.rar
4,下載rtmp模塊源碼:GitHub - arut/nginx-rtmp-module: NGINX-based Media Streaming Server
前三個庫源碼下載完成后,都進行解壓。
二、源碼編譯
pcre庫和libz庫都不用單獨編譯,在編譯nginx時添加模塊時一起編譯。
1,configure 配置
cd nginx-1.20.2 //切換到nginx源碼目錄下 ./configure --prefix=/usr/sbin --add-module=/home/tianyexing/Documents/tools/nginx_rtmp/nginx-rtmp-module-master --with-http_ssl_module --with-debug --with-pcre=/home/tianyexing/Documents/tools/pcre/pcre-8.39 --with-zlib=/home/tianyexing/Documents/tools/zlib/zlib-1.2.11 // --prefix=/usr/sbin 指定安裝目錄,最后install時生成的程序放在這個目錄下 // --add-module=/home/tianyexing/Documents/tools/nginx_rtmp/nginx-rtmp-module-master 編譯rtmp模塊,這個目錄是上面下載源碼后解壓的目錄 // --with-pcre=/home/tianyexing/Documents/tools/pcre/pcre-8.39 編譯pcre模塊,這個目錄是上面下載源碼后解壓的目錄 // --with-zlib=/home/tianyexing/Documents/tools/zlib/zlib-1.2.11 編譯zlib模塊,這個目錄是上面下載源碼后解壓的目錄
因為我要編譯的arm-himix200-linux版本,但nginx源碼目錄下的configure不支持--host,然后用
--with-cc=arm-himix200-linux-gcc時也會出錯,于是只能選擇手動修改(修改點下面會講到)。執(zhí)行后會在當前目錄下生成objs和Makefile。
1) 修改objs/Makefile
2) 修改nginx-1.20.2/auto/cc/conf文件,如:
?3) 修改?nginx-1.20.2/auto/types/sizeof ,如:
其他修改可以去搜索一下,因為修改好幾個已經(jīng)不記得了。
2,編譯錯誤
直接在nginx源碼目錄下make就行,因為它里面執(zhí)行的就是objs/Makefile
1)找不到openssl/ssl.h頭文件,如:
?系統(tǒng)中是已經(jīng)有openssl/ssl.h文件的,是系統(tǒng)目錄/usr/include下
但編譯時就是提示找不到,不知是否跟編譯arm版本有關,因為我正好有這個arm版本的openssl頭文件,所以這里沒去糾結,把別處的openssl目錄拷貝過來直接用了,不過添加頭文件目錄后,需要修改objs/Makefile,我新加的頭文件目錄是在nginx源碼目錄src下,修改如下:
這個CORE_INCS是編譯nginx要用到的頭文件。
這個是其他模塊,nginx-rtmp, pcre, zlib 可能用到的頭文件目錄。
2) IPv6問題
?
提示找不到這個定義,但這個定義在系統(tǒng)是有的,?這里也不糾結,不用ipv6,所把相關的代碼注釋掉了。
3)Archive has no index; run ranlib to add? one ---- 庫平臺不匹配問題
?因為這當中編譯過很多次,x86版本,arm版本都編譯過,然后并沒有make clean,這里用了之前的x86版本的庫,所以這里提示錯誤了,因為我要編譯arm-himix200-linux版本,查看庫信息如:
?所以需要make clean,然后再執(zhí)行上面的configure 重新生成Makefile。
4) 找不到ssl庫和crypto庫
objs/Makefile 里有如下鏈接
最后鏈接時出錯?
?
這個arm版本的庫,我之前編譯過的,然后直接修改成絕對路徑。若是沒有這兩個庫google一下。
?
最終編譯出我arm版本,x86版本。
三、目標板上執(zhí)行
?拷貝到arm版上執(zhí)行時,失敗了,但沒有提示信息,結果是用?nginx -s reload得出錯誤信息,如:
?因為在configure配置時,是指定安裝目錄--prefix=/usr/sbin,在編譯完成后,會在/usr/sbin下新建了三個目錄 sbin、conf、logs,各目錄如:
?于是在arm板子上對應的新建sbin, conf, logs目錄,并將其目錄下的文件全部拷貝過去,結果運行成功了:
已經(jīng)看到在監(jiān)聽1935端口。
之前也編譯出來過arm版本,也是運行不成功,因為configure時prefix指定安裝路徑是pc上一個目錄,結果也是出現(xiàn)如上的open()的錯誤。那如果configure配置時,--prefix指定的目錄目標板子上沒有,那就是運行不成功的,這個要怎么修改呢?還沒查到,有知道的同學麻煩告知一下。
原文鏈接:https://blog.csdn.net/tianyexing2008/article/details/122149109
相關推薦
- 2023-01-26 Python上下文管理器深入講解_python
- 2022-12-11 Flow如何解決背壓問題的方法詳解_Android
- 2023-04-24 Android布局控件View?ViewRootImpl?WindowManagerService關
- 2022-12-26 Qt利用QSortFilterProxyModel代理實現(xiàn)自定義排序與聯(lián)合過濾_C 語言
- 2023-05-11 C#利用OLEDB實現(xiàn)將DataTable寫入Excel文件中_C#教程
- 2023-11-16 python list 刪除列表中某個元素的3種方法;附加刪除numpy數(shù)組中的指定索引元素的方法
- 2022-08-22 C++實現(xiàn)字符串切割的兩種方法_C 語言
- 2022-09-26 Josephus_problem_bidirectional 雙向約瑟夫問題
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支