当前位置:网站首页>Clang compile link ffmpeg FAQ
Clang compile link ffmpeg FAQ
2022-07-07 15:41:00 【When can Xiaobai advance to success】
One 、 Problems encountered during compilation
1、 Command not found
error message :
./build_android.sh: line 18: --enable-shared: command not found ./build_android.sh: line 20: --disable-static: command not found ./build_android.sh: line 22: --disable-doc: command not found ./build_android.sh: line 24: --disable-ffmpeg: command not found ./build_android.sh: line 26: --disable-ffplay: command not found ./build_android.sh: line 28: --disable-ffprobe: command not found ./build_android.sh: line 30: --disable-ffserver: command not found ./build_android.sh: line 32: --disable-avdevice: command not found |
solve :
If it's direct copy Online shell Script , It could be dos Format , Please use dos2unix build_android.sh Change my , Delete the extra space ( This is very important dos2unix It's a tool , If not, please install it first :brew install dos2unix , It'll be over soon .
2、xmakefile File not generated
error message :
./android_config.sh: line 36: --enable-shared: command not found Makefile:2: ffbuild/config.mak: No such file or directory Makefile:40: /tools/Makefile: No such file or directory Makefile:41: /ffbuild/common.mak: No such file or directory Makefile:91: /libavutil/Makefile: No such file or directory Makefile:91: /ffbuild/library.mak: No such file or directory Makefile:93: /fftools/Makefile: No such file or directory Makefile:94: /doc/Makefile: No such file or directory Makefile:95: /doc/examples/Makefile: No such file or directory Makefile:160: /tests/Makefile: No such file or directory make: *** No rule to make target `/tests/Makefile'. Stop. Makefile:2: ffbuild/config.mak: No such file or directory Makefile:40: /tools/Makefile: No such file or directory Makefile:41: /ffbuild/common.mak: No such file or directory Makefile:91: /libavutil/Makefile: No such file or directory Makefile:91: /ffbuild/library.mak: No such file or directory Makefile:93: /fftools/Makefile: No such file or directory Makefile:94: /doc/Makefile: No such file or directory Makefile:95: /doc/examples/Makefile: No such file or directory Makefile:160: /tests/Makefile: No such file or directory |
solve :
perform ./configure --disable-x86asm
Generate config.mak file
3、arm-linux-androideabi-gcc is unable to create an executable file
error message :
/Users/aria/dev/android/sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-gcc is unable to create an executable file. |
reason :
Check ndk edition ,android The official from r18b
Start , Has been removed gcc See ndk r18b Revised content
solve :
Use clang Compile , For details, see :https://medium.com/@ilja.kosynkin/building-ffmpeg-4-0-for-android-with-clang-642e4911c31e
4、/android_config.sh:line32:xxxx No such file or directory
reason :.configure
The following commands cannot have comments
solve :
Which line of code to delete the comment
5、static declaration of 'xxx' follows non-static declaration
solve :
config.h Search for lrint、lrintf、round、roundf Wait for the right character , take 0 It is amended as follows 1
#define HAVE_LLRINT 1 #define HAVE_LLRINTF 1 #define HAVE_LRINT 1 #define HAVE_LRINTF 1 #define HAVE_ROUND 1 #define HAVE_ROUNDF 1 #define HAVE_CBRT 1 #define HAVE_CBRTF 1 #define HAVE_COPYSIGN 1 #define HAVE_TRUNC 1 #define HAVE_TRUNCF 1 #define HAVE_RINT 1 #define HAVE_HYPOT 1 #define HAVE_ERF 1 |
Or use it directly sed
To modify the config.h
file
sed -i -e 's/#define HAVE_LLRINT 0/#define HAVE_LLRINT 1/g' config.h sed -i -e 's/#define HAVE_LLRINTF 0/#define HAVE_LLRINTF 1/g' config.h sed -i -e 's/#define HAVE_LRINT 0/#define HAVE_LRINT 1/g' config.h sed -i -e 's/#define HAVE_LRINTF 0/#define HAVE_LRINTF 1/g' config.h sed -i -e 's/#define HAVE_ROUND 0/#define HAVE_ROUND 1/g' config.h sed -i -e 's/#define HAVE_ROUNDF 0/#define HAVE_ROUNDF 1/g' config.h sed -i -e 's/#define HAVE_CBRT 0/#define HAVE_CBRT 1/g' config.h sed -i -e 's/#define HAVE_CBRTF 0/#define HAVE_CBRTF 1/g' config.h sed -i -e 's/#define HAVE_COPYSIGN 0/#define HAVE_COPYSIGN 1/g' config.h sed -i -e 's/#define HAVE_TRUNC 0/#define HAVE_TRUNC 1/g' config.h sed -i -e 's/#define HAVE_TRUNCF 0/#define HAVE_TRUNCF 1/g' config.h sed -i -e 's/#define HAVE_RINT 0/#define HAVE_RINT 1/g' config.h sed -i -e 's/#define HAVE_HYPOT 0/#define HAVE_HYPOT 1/g' config.h sed -i -e 's/#define HAVE_ERF 0/#define HAVE_ERF 1/g' config.h sed -i -e 's/#define HAVE_GMTIME_R 0/#define HAVE_GMTIME_R 1/g' config.h sed -i -e 's/#define HAVE_LOCALTIME_R 0/#define HAVE_LOCALTIME_R 1/g' config.h sed -i -e 's/#define HAVE_INET_ATON 0/#define HAVE_INET_ATON 1/g' config.h |
6、xxxx error:expected ')'
error message :
#define getenv(x) NULL ^ /home/cd008/diska/android-ndk-r9/platforms/android-18/arch-arm/usr/include/stdlib.h:54:14: note: in expansion of macro 'getenv' extern char *getenv(const char *); ^ ./config.h:17:19: error: expected ')' before numeric constant #define getenv(x) NULL ^ /home/cd008/diska/android-ndk-r9/platforms/android-18/arch-arm/usr/include/stdlib.h:54:14: note: in expansion of macro 'getenv' extern char *getenv(const char *); |
solve :
stay config.h Note out #define getenv(x) NULL
/#define getenv(x) NULL/
sed -i -e 's/#define getenv(x) NULL/\/\*#define getenv(x) NULL\*\//g' config.h |
7、arm-linux-androideabi-ld -Wl,-soname,libavutil.so unknown option
error message :
Users/aria/dev/android/sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-ld -Wl,-soname |
reason :
gcc structure .so
The order is -shared -wl,soname,xxxx.so
and clang Yes. -shared -soname xxx.so
solve :
modify ffbuild/config.mak
file , take SHFLAGS=-shared -Wl,-soname,$(SLIBNAME)
It is amended as follows SHFLAGS=-shared -soname $(SLIBNAME)
8、arm-linux-androideabi-ld:fatal error:-shared and -pie are incompatible
solve :
modify ffbuild/config.mak
file , take LDEXEFLAGS= -fPIE -pie
Get rid of -pie
9、member at 2760 is not an ELF object
reason 1: Not used ndk Band ar To pack
solve : Check ar
Whether the path of the command is correct
reason 2: macos ranlib and ndk Of ranlib Are not compatible
solve : see 3.8
10、the table of contents is empty(no object file memberss in the library define global symbols)
reason :
macos Of ranlib and ndk Of ranlib Are not compatible
solve :
Use ndk Self contained ranlib
ranlib=xxxx/arm-linux-androideabi-runlib |
11、undefined reference to '__aeabi_memcpy'
reason :
ld Merge multiple .a
Static library parameter error
solve :
take -static
Change it to -shared
12、undefined reference xxxx
reason :
ffmpeg Problems caused by inlining
solve :
There is no effective solution for the time being
summary
The most common problem in the compilation process is clang、ld、ar And other tools , When these errors occur , Various tools should be used --help
To check if the configuration is correct , Especially from gcc
Over to clang
,gcc and clang Many configurations of are different , Most tutorials on the Internet use gcc To compile the ffmpeg.
clang --help xxxxxx-ld --help xxxxxx-ar --help |
Two 、 Problems encountered in link execution
边栏推荐
- [quick start for Digital IC Validation] 26. Ahb - sramc (6) for system verilog project practice (Basic Points of APB Protocol)
- TypeScript 发布 4.8 beta 版本
- Pit avoidance: description of null values in in and not in SQL
- Steps to create P8 certificate and warehousing account
- [markdown grammar advanced] make your blog more exciting (IV: set font style and color comparison table)
- Jacobo code coverage
- [机缘参悟-40]:方向、规则、选择、努力、公平、认知、能力、行动,读3GPP 6G白皮书的五层感悟
- What are the safest securities trading apps
- Starting from 1.5, build a microservice framework link tracking traceid
- How to create Apple Developer personal account P8 certificate
猜你喜欢
[quick start of Digital IC Verification] 23. AHB sramc of SystemVerilog project practice (3) (basic points of AHB protocol)
[quick start of Digital IC Verification] 20. Basic grammar of SystemVerilog learning 7 (coverage driven... Including practical exercises)
Zhongang Mining: Fluorite continues to lead the growth of new energy market
Create lib Library in keil and use lib Library
2022 all open source enterprise card issuing network repair short website and other bugs_ 2022 enterprise level multi merchant card issuing platform source code
2. Heap sort "hard to understand sort"
什么是数据泄露
【数字IC验证快速入门】23、SystemVerilog项目实践之AHB-SRAMC(3)(AHB协议基本要点)
HPDC smart base Talent Development Summit essay
Ctfshow, information collection: web4
随机推荐
【OBS】RTMPSockBuf_ Fill, remote host closed connection.
什么是pv和uv? pv、uv
什麼是數據泄露
[quick start of Digital IC Verification] 25. AHB sramc of SystemVerilog project practice (5) (AHB key review, key points refining)
Getting started with webgl (4)
【數字IC驗證快速入門】26、SystemVerilog項目實踐之AHB-SRAMC(6)(APB協議基本要點)
全日制研究生和非全日制研究生的区别!
Ctfshow, information collection: web14
摘抄的只言片语
Create lib Library in keil and use lib Library
How to understand that binary complement represents negative numbers
居然从408改考自命题!211华北电力大学(北京)
Oracle control file loss recovery archive mode method
什么是数据泄露
Super signature principle (fully automated super signature) [Yun Xiaoduo]
webgl_ Enter the three-dimensional world (1)
The significance of XOR in embedded C language
【服务器数据恢复】戴尔某型号服务器raid故障的数据恢复案例
【数字IC验证快速入门】20、SystemVerilog学习之基本语法7(覆盖率驱动...内含实践练习)
【数字IC验证快速入门】26、SystemVerilog项目实践之AHB-SRAMC(6)(APB协议基本要点)