compile with -fPIC


在新公司工作第四天,依然要編譯FFmpeg,不同的是難度大了,以前遇到什么參數編譯不過的,就去掉,因為不是專業做視頻的,但是新公司繞不過了。

編譯FFmpeg動態庫的時候發現鏈接某些靜態庫的時候會報錯:

relocation R_X86_64_32S against `cmnMemAlloc' can not be used when making a shared object; recompile with -fPIC

基礎不扎實,不知道make的時候還可以添加參數,查了很多資料,最后從一個回答中試出解決方案:

再編譯存在問題的庫時,調用“make”命令的時候,添加“CFLAGS='-fpic'”參數,就可以了。

舉個栗子:

我編譯FFmpeg時報這樣的錯:

/usr/bin/ld: /usr/local/lib/libvo-amrwbenc.a(wrapper.o): relocation R_X86_64_32S against `cmnMemAlloc' can not be used when making a shared object; recompile with -fPIC

意思是鏈接的“libvo-amrwbenc.a”庫需要添加“-fPIC”重新編譯,那我就在編譯“libvo-amrwbenc.a”時,調用

make CFLAGS='$CFLAGS -fpic'

有的./configure 時也有這樣的參數“CFLAGS”,也可以在這里添加

 

編譯動態庫要鏈接靜態庫才會出現這問題,編譯靜態庫鏈接靜態庫則不會

有個回答如是說:

The solution was to compile everything with -fPIC, and link shared objects with -shared.

Add -fPIC to CFLAGS or CXXFLAGS for make-based projects.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM