Zhefan-Xu/time_optimizer

编译报错问题及解决方案

Opened this issue · 0 comments

https://github.com/Zhefan-Xu/time_optimizer 我catkin build time_optimizer 编译这个项目,报错:Errors << time_optimizer:make /home/xtdrone/catkin_ws/logs/time_optimizer/build.make.001.log
/usr/bin/ld:/home/xtdrone/catkin_ws/src/CMU-autoframework/time_optimizer/include/time_optimizer/third_party/lib/x86/libmosek64.so: file format not recognized; treating as linker script
/usr/bin/ld:/home/xtdrone/catkin_ws/src/CMU-autoframework/time_optimizer/include/time_optimizer/third_party/lib/x86/libmosek64.so:0: syntax error
collect2: error: ld returned 1 exit status
make[2]: *** [/home/xtdrone/catkin_ws/devel/.private/time_optimizer/lib/libtime_optimizer.so] Error 1
make[1]: *** [CMakeFiles/time_optimizer.dir/all] Error 2
make: *** [all] Error 2

这个错误通常是因为 libmosek64.so 文件不是有效的共享库文件,可能是因为它是一个错误的文件格式或未正确链接的库。以下是可能的解决方案:

1. 确认 libmosek64.so 文件格式

首先,检查该文件是否是有效的共享库文件。您可以使用以下命令来检查文件格式:

file /home/xtdrone/catkin_ws/src/CMU-autoframework/time_optimizer/include/time_optimizer/third_party/lib/x86/libmosek64.so

这将显示文件的类型,如果不是 ELF 共享对象文件,那么该文件可能是无效的。

2. 下载正确的 libmosek64.so 文件

如果 libmosek64.so 文件无效或损坏,您可以从 MOSEK 官方网站重新下载。以下是步骤:

  1. 前往 MOSEK官网,创建账号并下载对应系统和架构的 MOSEK SDK。
  2. 解压下载的文件,并找到 libmosek64.so 文件。
  3. 将正确的 libmosek64.so 文件替换到项目路径中:/home/xtdrone/catkin_ws/src/CMU-autoframework/time_optimizer/include/time_optimizer/third_party/lib/x86/

3. 确保库路径设置正确

CMakeLists.txt 文件中,确保添加了正确的库路径:

link_directories(${PROJECT_SOURCE_DIR}/include/time_optimizer/third_party/lib/x86)

并且在 target_link_libraries 中正确链接了 mosek 库,例如:

target_link_libraries(time_optimizer
  ${catkin_LIBRARIES}
  mosek64  # 确保库名正确
)

4. 确保文件权限

确认 libmosek64.so 文件有正确的读取和执行权限:

chmod +rx /home/xtdrone/catkin_ws/src/CMU-autoframework/time_optimizer/include/time_optimizer/third_party/lib/x86/libmosek64.so

5. 清理并重新编译

清理编译缓存并重新编译:

catkin build time_optimizer

如果这些步骤无法解决问题,请确保您使用的 libmosek64.so 是针对您系统的架构和操作系统构建的。