【库连接问题】makefile中如何连接库以及解决/usr/bin/ld: skipping incompatible问题

解决库链接问题
本文记录了在项目开发过程中遇到的库链接问题及解决方案,包括如何正确配置Makefile以使用特定库,解决因库版本与平台不兼容导致的问题。

关于如何连接库,这里只记录自己碰到的一些问题

编写Makefile

编译时 -c 生成.o 文件:后面要加-I (指明包含的头文件)

链接时 -o 生成可执行文件:-L(指明库的位置) -l(指明库的名字)

还有一个是在引用json库的问题:
lib文件下有两个文件夹 include和 lib文件夹
include 文件夹中有一个文件夹json,里面又包含着json的头文件
lib文件中放着libjson.a的静态库

编写makefile时 注意,编译时 引入头文件目录到include 就行

编写base_json.h文件时:引用json的文件 #include”json/json.h”

今天在做项目的时候,用make命令后出现了/usr/bin/ld: skipping incompatible……问题。
这个问题实质是链接库文件时,库文件版本与平台版本不对应的问题。
解决方法:objdump -p libmylib.a 看一下该库的版本是32为还是64位的,或是ARM版还是..等等。仔细分析一下。你就会恍然大雾。(我的碰到的问题是:编译器选择的是64版,但是xxx.a是32版,当然不兼容)

这里写图片描述

结论:这几天碰到的问题很多,这些坑都要自己一个一个踩过,才会有更好的收获。

[100%] Built target aimrt_protocols_sensor_pb_gencode /usr/bin/ld: skipping incompatible /home/byd/X1/agibot_x1_infer-main/src/module/joy_stick_module/third_party/lib/libqpOASES.so when searching for -lqpOASES /usr/bin/ld: cannot find -lqpOASES: No such file or directory /usr/bin/ld: skipping incompatible /home/byd/X1/agibot_x1_infer-main/src/module/joy_stick_module/third_party/lib/libqpOASES.so when searching for -lqpOASES /usr/bin/ld: skipping incompatible /home/byd/X1/agibot_x1_infer-main/src/module/control_module/third_party/lib/libruckig.so when searching for -lruckig /usr/bin/ld: cannot find -lruckig: No such file or directory /usr/bin/ld: skipping incompatible /home/byd/X1/agibot_x1_infer-main/src/module/control_module/third_party/lib/libruckig.so when searching for -lruckig /usr/bin/ld: skipping incompatible /home/byd/X1/agibot_x1_infer-main/src/module/control_module/third_party/lib/libonnxruntime.so when searching for -lonnxruntime /usr/bin/ld: skipping incompatible /home/byd/X1/agibot_x1_infer-main/src/module/sim_module/third_party/lib/libmujoco.so when searching for -lmujoco /usr/bin/ld: cannot find -lmujoco: No such file or directory /usr/bin/ld: skipping incompatible /home/byd/X1/agibot_x1_infer-main/src/module/sim_module/third_party/lib/libmujoco.so when searching for -lmujoco collect2: error: ld returned 1 exit status gmake[2]: *** [src/pkg/pkg1/CMakeFiles/xyber_x1_infer_pkg1.dir/build.make:248: libpkg1.so] Error 1 gmake[1]: *** [CMakeFiles/Makefile2:3121: src/pkg/pkg1/CMakeFiles/xyber_x1_infer_pkg1.dir/all] Error 2 gmake: *** [Makefile:166: all] Error 2
06-10
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值