替换libjpeg-turbo版本后编译UVCCamera遇R_386_32错误求解决
解决UVCCamera编译时libjpeg-turbo的R_386_32重定位错误
编译UVCCamera时遇到以下链接错误:
[system.err] ld: error: relocation R_386_32 cannot be used against local symbol; recompile with -fPIC [system.err] >>> defined in ./obj/local/x86/libjpeg-turbo1500_static.a(jfdctflt-3dn.o) [system.err] >>> referenced by jni/libjpeg-turbo-1.5.0/simd/jfdctflt-3dn.asm [system.err] >>> jfdctflt-3dn.o:(.text+0xB4) in archive ./obj/local/x86/libjpeg-turbo1500_static.a
回退项目版本后问题仍存在,可按以下方式添加-fPIC编译标志快速修复:
针对Android.mk构建的情况
- 找到libjpeg-turbo模块对应的
Android.mk文件,定位到LOCAL_CFLAGS配置项,添加-fPIC:LOCAL_CFLAGS += -fPIC - 若该模块是静态库,确保没有禁用位置无关代码的配置,同时可以给链接标志也加上:
LOCAL_LDFLAGS += -fPIC
针对CMakeLists.txt构建的情况
- 仅给libjpeg-turbo目标添加编译标志(推荐):
target_compile_options(libjpeg-turbo PRIVATE -fPIC) - 或者全局添加C编译标志(影响所有模块):
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
额外修复步骤(解决回退版本仍报错的问题)
因为回退项目后仍无法编译,大概率是NDK编译缓存残留导致,执行以下操作清理缓存:
- 执行Gradle清理命令:
./gradlew clean - 删除项目目录下的
.cxx、obj、libs文件夹,然后重新触发编译
内容的提问来源于stack exchange,提问作者Hong
相关产品推荐
相关产品推荐

