记录使用珞石机械臂SDK时的问题:
本文作者的系统是Ubuntu 22.04,使用Cmake编译rokae机械臂C++的SDK时出现很奇怪的问题,特地记录一下,供后来者学习
问题记录
本文作者先是使用git工具调取github上的珞石机械臂SDK包。
打开终端输入如下指令。
git clone https://github.com/RokaeRobot/xCoreSDK-CPP.git
然后创建一个 build 文件夹,使用cmake编译整个工程。
cd ./xCoreSDK-CPP/
mkdir -p build
cd ./build/
cmake ..
make
可是在上述指令运行完毕后,整个工程编译的的过程中出现如下的问题
[ 4%] Building CXX object example/CMakeFiles/sdk_example.dir/sdk_example.cpp.o
[ 8%] Linking CXX executable ../bin/sdk_example
/usr/bin/ld:../../lib/Linux/cpp/x86_64/libxCoreSDK.a: file format not recognized; treating as linker script
/usr/bin/ld:../../lib/Linux/cpp/x86_64/libxCoreSDK.a:1: syntax error
collect2: error: ld returned 1 exit status
make[2]: *** [example/CMakeFiles/sdk_example.dir/build.make:99:bin/sdk_example] 错误 1
make[1]: *** [CMakeFiles/Makefile2:207:example/CMakeFiles/sdk_example.dir/all] 错误 2
make: *** [Makefile:136:all] 错误 2
我们可以发现工程在链接的时候出现了错误,他说文件格式并未能识别。一开始我检查了
CMakeList.txt
文件是不是有问题,后来查阅 MakeFile
均未出现问题。随后开始面向CSDN编程,我找到了这篇文章。
https://blog.csdn.net/qq_39093373/article/details/118220195?ops_request_misc=%257B%2522request%255Fi
此文章作者也出现了类似的问题,是由于在windows系统中解压压缩包再转到linux下出现的问题,可是哥们全程都使用linux系统,而且是直接git clone命令,完全不存在解压的情况呀。于是本文作者痛定思痛,开始检查出现错误的这个文件。libxCoreSDK.a
是linux系统中的静态链接库文件,用于程序的封装,像珞石这样的大长使用这种方式来发布SDK也是很正常的,但是为什么系统会识别不了呢?查阅了很多资料也无果,直到我使用VScode
打开工程的时候出现了端倪。
怎么你家的静态链接库文件就几行字啊?虽然哥们学识尚浅但是也不能这么糊弄我呀。于是我使用file
命令查看这个文件的类型。
file ./lib/Linux/cpp/x86_64/libxCoreSDK.a
好家伙命令行直接提示库文件变成了ASCII文本形式,如下所示:
./lib/Linux/cpp/x86_64/libxCoreSDK.a: `ASCII text`
然后我们再来查看一下文件的大小
fishros@fishros-linux:~/xCoreSDK-CPP$ ls -lh ./lib/Linux/cpp/x86_64/
总计 4.2M
-rw-rw-r-- 1 fishros fishros 132 1月 16 14:22 libxCoreSDK.a
-rw-rw-r-- 1 fishros fishros 2.0M 1月 16 14:22 libxCoreSDK.nomodel.so.0.3.4
-rw-rw-r-- 1 fishros fishros 2.3M 1月 16 14:22 libxCoreSDK.so.0.3.4
-rw-rw-r-- 1 fishros fishros 132 1月 16 14:22 libxMateModel.a
整个文件夹只有4.2M大,而两个库文件只有132Bytes,这不是在搞笑吗。于是我又查了很多这是什么情况,最终在一篇关于CUDA的github项目上找到了类似的问题。
在评论区的各类外国友人里面看到了一位亲切的中国人,用着纯正的中国腔告诉了我这个疑难杂症最好的解决办法。
而你,我的朋友,你是真正的英雄!
于是我删除了/xCoreSDK-CPP/lib/Linux/cpp/x86_64/
文件夹下面的libxCoreSDK.a
和libxMateModel.a
文件,重新在rokae的github网址上下载,只下载这两个静态链接库,再次查看文件大小。
fishros@fishros-linux:~/xCoreSDK-CPP$ ls -lh ./lib/Linux/cpp/x86_64/
总计 13M
-rw-rw-r-- 1 fishros fishros 5.1M 1月 16 15:07 libxCoreSDK.a
-rw-rw-r-- 1 fishros fishros 2.0M 1月 16 14:22 libxCoreSDK.nomodel.so.0.3.4
-rw-rw-r-- 1 fishros fishros 2.3M 1月 16 14:22 libxCoreSDK.so.0.3.4
-rw-rw-r-- 1 fishros fishros 3.5M 1月 16 03:22 libxMateModel.a
fishros@fishros-linux:~/xCoreSDK-CPP$ file ./lib/Linux/cpp/x86_64/libxCoreSDK.a
./lib/Linux/cpp/x86_64/libxCoreSDK.a: `current ar archive`
明显大了很多,而且查看文件的类型也终于不是ASCII码的格式,现在进行编译试试。
[ 4%] Building CXX object example/CMakeFiles/sdk_example.dir/sdk_example.cpp.o
[ 8%] Linking CXX executable ../bin/sdk_example
[ 8%] Built target sdk_example
[ 12%] Building CXX object example/CMakeFiles/move_example.dir/move_example.cpp.o
[ 16%] Linking CXX executable ../bin/move_example
[ 16%] Built target move_example
[ 20%] Building CXX object example/CMakeFiles/path_record.dir/path_record.cpp.o
[ 25%] Linking CXX executable ../bin/path_record
[ 25%] Built target path_record
[ 29%] Building CXX object example/CMakeFiles/rl_project.dir/rl_project.cpp.o
[ 33%] Linking CXX executable ../bin/rl_project
[ 33%] Built target rl_project
[ 37%] Building CXX object example/CMakeFiles/read_robot_state.dir/read_robot_state.cpp.o
[ 41%] Linking CXX executable ../bin/read_robot_state
[ 41%] Built target read_robot_state
[ 45%] Building CXX object example/rt/CMakeFiles/joint_position_control.dir/joint_position_control.cpp.o
[ 50%] Linking CXX executable ../../bin/joint_position_control
[ 50%] Built target joint_position_control
[ 54%] Building CXX object example/rt/CMakeFiles/joint_impedance_control.dir/joint_impedance_control.cpp.o
[ 58%] Linking CXX executable ../../bin/joint_impedance_control
[ 58%] Built target joint_impedance_control
[ 62%] Building CXX object example/rt/CMakeFiles/cartesian_impedance_control.dir/cartesian_impedance_control.cpp.o
[ 66%] Linking CXX executable ../../bin/cartesian_impedance_control
[ 66%] Built target cartesian_impedance_control
[ 70%] Building CXX object example/rt/CMakeFiles/move_commands.dir/move_commands.cpp.o
[ 75%] Linking CXX executable ../../bin/move_commands
[ 75%] Built target move_commands
[ 79%] Building CXX object example/rt/CMakeFiles/joint_s_line.dir/joint_s_line.cpp.o
[ 83%] Linking CXX executable ../../bin/joint_s_line
[ 83%] Built target joint_s_line
[ 87%] Building CXX object example/rt/CMakeFiles/cartesian_s_line.dir/cartesian_s_line.cpp.o
[ 91%] Linking CXX executable ../../bin/cartesian_s_line
[ 91%] Built target cartesian_s_line
[ 95%] Building CXX object example/rt/CMakeFiles/rt_industrial.dir/rt_industrial.cpp.o
[100%] Linking CXX executable ../../bin/rt_industrial
[100%] Built target rt_industrial
fishros@fishros-linux:~/xCoreSDK-CPP/build$ make install
Consolidate compiler generated dependencies of target sdk_example
[ 8%] Built target sdk_example
Consolidate compiler generated dependencies of target move_example
[ 16%] Built target move_example
Consolidate compiler generated dependencies of target path_record
[ 25%] Built target path_record
Consolidate compiler generated dependencies of target rl_project
[ 33%] Built target rl_project
Consolidate compiler generated dependencies of target read_robot_state
[ 41%] Built target read_robot_state
Consolidate compiler generated dependencies of target joint_position_control
[ 50%] Built target joint_position_control
Consolidate compiler generated dependencies of target joint_impedance_control
[ 58%] Built target joint_impedance_control
Consolidate compiler generated dependencies of target cartesian_impedance_control
[ 66%] Built target cartesian_impedance_control
Consolidate compiler generated dependencies of target move_commands
[ 75%] Built target move_commands
Consolidate compiler generated dependencies of target joint_s_line
[ 83%] Built target joint_s_line
Consolidate compiler generated dependencies of target cartesian_s_line
[ 91%] Built target cartesian_s_line
Consolidate compiler generated dependencies of target rt_industrial
[100%] Built target rt_industrial
Install the project...
-- Install configuration: "Release"
-- Installing: /home/fishros/xCoreSDK-CPP/build/dist/lib/libxCoreSDK.nomodel.so.0.3.4
-- Installing: /home/fishros/xCoreSDK-CPP/build/dist/bin/sdk_example
-- Installing: /home/fishros/xCoreSDK-CPP/build/dist/bin/move_example
-- Installing: /home/fishros/xCoreSDK-CPP/build/dist/bin/path_record
-- Installing: /home/fishros/xCoreSDK-CPP/build/dist/bin/rl_project
-- Installing: /home/fishros/xCoreSDK-CPP/build/dist/bin/read_robot_state
-- Installing: /home/fishros/xCoreSDK-CPP/build/dist/bin/joint_position_control
-- Installing: /home/fishros/xCoreSDK-CPP/build/dist/bin/joint_impedance_control
-- Installing: /home/fishros/xCoreSDK-CPP/build/dist/bin/cartesian_impedance_control
-- Installing: /home/fishros/xCoreSDK-CPP/build/dist/bin/move_commands
-- Installing: /home/fishros/xCoreSDK-CPP/build/dist/bin/joint_s_line
-- Installing: /home/fishros/xCoreSDK-CPP/build/dist/bin/cartesian_s_line
-- Installing: /home/fishros/xCoreSDK-CPP/build/dist/bin/rt_industrial
fishros@fishros-linux:~/xCoreSDK-CPP/build$ ./bin/sdk_example
网络异常: 网络连接错误
最后运行一下bin文件下的sdk_example程序,没有出现奇怪的错误,只是显示网络连接异常,可能是因为我没有连接机械臂的原因,这里如果有了解为什么的大佬也欢迎和我讨论。所以编译问题终于解决,哥们也终于能好好睡个觉了。