/usr/bin/ld: skipping incompatible解决方案

今天在做项目的时候,用make命令后出现了/usr/bin/ld: skipping incompatible…问题。
/usr/bin/ld: skipping incompatible解决方案_第1张图片
分析:编译器给出的错误信息已经很清楚了:兼容性问题,即产生了不兼容性且找不到libgstaudio-1.0.so共享库,可是libgstaudio-1.0.so在指定的路径下明明是存在的呢。

错误原因排查:

经过排查发现,我链接的共享库是在arm环境下编译产生的,而主程序却是在非arm环境的(此处错误),因此产生了不兼容性。

这个问题实质是链接库文件时,库文件版本与平台版本不对应的问题。

解决方法:objdump -p ibgstaudio-1.0.so 或者 file ***.o 查看文件信息
/usr/bin/ld: skipping incompatible解决方案_第2张图片
/usr/bin/ld: skipping incompatible解决方案_第3张图片

看一下该库的版本是32位还是64位的,或是ARM版还是..等等。 仔细分析一下,发现我在编译gst-omx-1.10.4包时所用的工具链是x86-64,而需要链接的库文件使用的工具链是ARM aarch64,至此,问题很明显是编译工具链配置错误。

查看omx包的makefile发现:–host=arm-openwrt-linux
/usr/bin/ld: skipping incompatible解决方案_第4张图片

而其他正常编译的包其配置为:–host=aarch64-openwrt-linux

修改后,重新make问题得到解决。

所以在编程时,必须保证主程序和各个模块之间编译环境的一致,否则会出现意想不到的结果。

你可能感兴趣的:(调试经验总结,linux,编译问题)