如何修复 Mujoco CmakeLists 构建错误“/usr/bin/ld: 找不到 -lglfw”?
How to fix Mujoco CmakeLists build error "/usr/bin/ld: cannot find -lglfw"?
我正在尝试使用 C++ 中的 Mujoco 模拟机器人的物理特性。因为该项目是更大工作区的一部分,所以我需要使用 cmake 来构建可执行文件。但是,我似乎无法正确 link 所有依赖库,所以我无法摆脱错误:
~: /usr/bin/ld: cannot find -lglfw
我在网上做了一些关于如何在 CmakeLists 中正确设置 Mujoco 的研究,并找到了一些示例 here, here, and here。
我从上面的示例中复制了 CmakeLists 文件,但错误仍然存在。这是我文件中的相关片段。我定义了一个环境变量 MUJOCO_PATH
来指向我机器上的 Mujoco 文件夹。具体来说 $HOME/.mujoco/mujoco200
.
CmakeLists.txt
######################################################
# define the include directory of all ${CATKIN_PKGS} #
######################################################
include_directories(
${PROJECT_SOURCE_DIR}/include
${catkin_INCLUDE_DIRS}
${Eigen_INCLUDE_DIRS}
$ENV{MUJOCO_PATH}/include
)
########################################################
# manage the creation of the libraries and executables #
########################################################
set(USE_GL 1)
link_directories($ENV{MUJOCO_PATH}/bin)
#Finding main mujoco library
if(${USE_GL})
file(GLOB LIB_MUJOCO $ENV{MUJOCO_PATH}/bin/libmujoco[0-9][0-9][0-9].so)
else()
file(GLOB LIB_MUJOCO $ENV{MUJOCO_PATH}/bin/libmujoco[0-9][0-9][0-9]nogl.so)
endif()
#Showing mujoco library found
message(STATUS "MuJoCo lib: " ${LIB_MUJOCO})
add_subdirectory(src)
src/CmakeLists.txt
set(BIN_NAME mujoco_finger_test)
add_executable(${BIN_NAME} ${BIN_NAME}.cpp)
target_link_libraries(${BIN_NAME} ${LIB_MUJOCO})
# Standard libraries for GL
target_link_libraries(${BIN_NAME} GL GLU glut )
# Additional libraries from mujoco package
target_link_libraries(${BIN_NAME} libglew.so libglfw.so.3 libglewegl.so libglewosmesa.so)
有人知道为什么会这样吗?我是否遗漏了这些示例中的某些内容?
谢谢!
您应该找到 GL/GLW 包而不是这个:target_link_libraries(${BIN_NAME} libglew.so libglfw.so.3 libglewegl.so libglewosmesa.so)
。这并不能确保这些库可用并且可以找到,而 FIND_PACKAGE(GLEW)
.
有关该主题的更多信息,请参阅 Linking GLEW with CMake。
我正在尝试使用 C++ 中的 Mujoco 模拟机器人的物理特性。因为该项目是更大工作区的一部分,所以我需要使用 cmake 来构建可执行文件。但是,我似乎无法正确 link 所有依赖库,所以我无法摆脱错误:
~: /usr/bin/ld: cannot find -lglfw
我在网上做了一些关于如何在 CmakeLists 中正确设置 Mujoco 的研究,并找到了一些示例 here, here, and here。
我从上面的示例中复制了 CmakeLists 文件,但错误仍然存在。这是我文件中的相关片段。我定义了一个环境变量 MUJOCO_PATH
来指向我机器上的 Mujoco 文件夹。具体来说 $HOME/.mujoco/mujoco200
.
CmakeLists.txt
######################################################
# define the include directory of all ${CATKIN_PKGS} #
######################################################
include_directories(
${PROJECT_SOURCE_DIR}/include
${catkin_INCLUDE_DIRS}
${Eigen_INCLUDE_DIRS}
$ENV{MUJOCO_PATH}/include
)
########################################################
# manage the creation of the libraries and executables #
########################################################
set(USE_GL 1)
link_directories($ENV{MUJOCO_PATH}/bin)
#Finding main mujoco library
if(${USE_GL})
file(GLOB LIB_MUJOCO $ENV{MUJOCO_PATH}/bin/libmujoco[0-9][0-9][0-9].so)
else()
file(GLOB LIB_MUJOCO $ENV{MUJOCO_PATH}/bin/libmujoco[0-9][0-9][0-9]nogl.so)
endif()
#Showing mujoco library found
message(STATUS "MuJoCo lib: " ${LIB_MUJOCO})
add_subdirectory(src)
src/CmakeLists.txt
set(BIN_NAME mujoco_finger_test)
add_executable(${BIN_NAME} ${BIN_NAME}.cpp)
target_link_libraries(${BIN_NAME} ${LIB_MUJOCO})
# Standard libraries for GL
target_link_libraries(${BIN_NAME} GL GLU glut )
# Additional libraries from mujoco package
target_link_libraries(${BIN_NAME} libglew.so libglfw.so.3 libglewegl.so libglewosmesa.so)
有人知道为什么会这样吗?我是否遗漏了这些示例中的某些内容?
谢谢!
您应该找到 GL/GLW 包而不是这个:target_link_libraries(${BIN_NAME} libglew.so libglfw.so.3 libglewegl.so libglewosmesa.so)
。这并不能确保这些库可用并且可以找到,而 FIND_PACKAGE(GLEW)
.
有关该主题的更多信息,请参阅 Linking GLEW with CMake。