ffmpeg先編譯靜態庫再編譯動態鏈接庫出現的異常問題解決

上次解決了編譯ffplay異常的問題
這次要將ffmpeg的庫用起來,不過編譯動態庫的時候遇到了點問題:
relocation R_X86_64_32 against `a local symbol’ can not be used when making a shared object; recompile with -fPIC

由於上次使用./configure默認配置,裏面只編譯了.a靜態文件(可通過 ./configure --help 看到)。所以先把.so動態庫也編譯了。
推薦一開始配置./configure文件的時候就添加設置 --enable-shared。如:./configure --enable-shared --enable-ffplay

sudo make clean	//清除掉上一章編譯的內容後重新安裝
./configure --enable-shared --enable-ffplay
sudo make 
sudo make install

否則先編譯靜態庫之後再添加動態庫的編譯會出現上面的錯誤:

是由於,只進行靜態編譯./configure生成的編譯配置信息不會生成 -fPIC配置
解決:
可參考:https://blog.csdn.net/ssf1987/article/details/81118631

由於ffmpeg-3.4.2/使用gcc來編譯靜態依賴庫,編譯的中間文件都保存在了ffmpeg-3.4.2/ffbuild下面,所以需要進去編輯 config.mak。
1、修改配置信息中,使用gcc、g++編譯器時的配置項:
在文件裏的CFLAGS= 還有CPPFLAGS=之後增加 -fPIC。 之後編譯

sudo make 
sudo make install

或者使用方法2,則不需要進去修改配置項,臨時修改CFLAGS變量:
2、

CFLAGS="-O3 -fPIC" ./configure --enable-shared
sudo make 
sudo make install

之後就可以在你配置安裝的目錄下看到動態鏈接庫了
在這裏插入圖片描述
下一章就可以把ffmpeg用起來了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章