首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Gurobi与Drake的问题

Gurobi与Drake的问题
EN

Stack Overflow用户
提问于 2022-09-29 20:26:12
回答 2查看 76关注 0票数 0

我想和Gurobi一起建造德雷克,现在有几个问题。我应该指出,我正在将drake作为一个包处理在我的ROS工作区中,而且到目前为止一直运行得很好。

  1. 使用--config=gurobi成功构建并运行一个测试文件后,我得到了错误:

代码语言:javascript
运行
复制
/home/user/test_ws/devel/lib/simple_test/simple_test: error while loading shared libraries: libdrake_lcm.so: cannot open shared object file: No such file or directory

当我省略--config=gurobi时,这种情况不会发生。

  1. 在重新构建之后,我得到了错误:

代码语言:javascript
运行
复制
Traceback (most recent call last):
  File "/home/user/test_ws/build/drake/_bazel_user/c0701f1e1e0381b11260fb3e4da5ea58/execroot/drake/bazel-out/k8-opt/bin/install.runfiles/drake/tools/install/installer.py", line 485, in <module>
    main(sys.argv[1:])
  File "/home/user/test_ws/build/drake/_bazel_user/c0701f1e1e0381b11260fb3e4da5ea58/execroot/drake/bazel-out/k8-opt/bin/install.runfiles/drake/tools/install/installer.py", line 478, in main
    exec(f'installer.{action}')
  File "<string>", line 1, in <module>
  File "/home/user/test_ws/build/drake/_bazel_user/c0701f1e1e0381b11260fb3e4da5ea58/execroot/drake/bazel-out/k8-opt/bin/install.runfiles/drake/tools/install/installer.py", line 169, in install
    self.copy_or_link(src, dst_full)
  File "/home/user/test_ws/build/drake/_bazel_user/c0701f1e1e0381b11260fb3e4da5ea58/execroot/drake/bazel-out/k8-opt/bin/install.runfiles/drake/tools/install/installer.py", line 145, in copy_or_link
    os.symlink(relative_link, dst)
FileExistsError: [Errno 17] File exists: './libgurobi.so.9.5.2' -> '/home/user/test_ws/install/lib/libgurobi95.so'

手动删除现有文件解决了问题,但必须不断删除该文件是有问题的。

更新

我现在正在解释我当前的构建设置。我有一个ros工作区组织为

代码语言:javascript
运行
复制
test_ws/
    build/
    devel/
    ...
    src/
        drake/
        simple_test/
            CMakeLists.txt
            package.xml
            test.cpp

我的CMakeLists.txt包含以下内容:

代码语言:javascript
运行
复制
cmake_minimum_required(VERSION 3.0.2)
project(simple_test)

execute_process(COMMAND ${CMAKE_C_COMPILER} -fuse-ld=gold -Wl,--version ERROR_QUIET OUTPUT_VARIABLE ld_version)
if ("${ld_version}" MATCHES "GNU gold")
  message("USING GOLD LINKER!")
  set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold -Wl,--disable-new-dtags")
  set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fuse-ld=gold -Wl,--disable-new-dtags")
endif()

add_compile_options(-std=c++14 -g -DEIGEN_NO_DEBUG -Werror=return-type) #with debugging symbols

find_package(drake REQUIRED PATHS /home/user/test_ws/src/drake/build/install)
find_package(catkin)

catkin_package()

add_executable(simple_test test.cpp)
target_link_libraries(simple_test drake::drake)
EN

回答 2

Stack Overflow用户

发布于 2022-09-29 21:27:42

我还没有研究第一个问题。

对于第二个问题,我认为是Drake安装程序中的一个bug (参见https://github.com/RobotLocomotion/drake/issues/18007)。但是无论如何,不要试图连续安装德雷克两次,这是不健全的。在尝试新安装之前,您应该始终对旧安装进行rm

票数 0
EN

Stack Overflow用户

发布于 2022-09-29 22:45:52

因为(1)我不能复制。

首先,我通过以下方式安装了德雷克最新的主人:

代码语言:javascript
运行
复制
env GUROBI_HOME=/home/jwnimmer/Downloads/gurobi951/linux64 \
  bazel run //:install --config=gurobi -- /home/jwnimmer/tmp/wakka

这应该与对该文件夹运行cmake && make install相同。

然后,我构建并链接了一个示例程序:

代码语言:javascript
运行
复制
jwnimmer@call-cps:~/tmp/wakka$ cat main.cc
#include "drake/common/find_resource.h"

int main() {
  drake::FindResourceOrThrow(
      "drake/manipulation/models/iiwa_description/urdf/"
      "iiwa14_primitive_collision.urdf");
  return 0;
}
jwnimmer@call-cps:~/tmp/wakka$ g++ --std=c++17 main.cc -Iinclude -Llib -Wl,-rpath -Wl,$(pwd)/lib -ldrake -omain 
jwnimmer@call-cps:~/tmp/wakka$ ./main; echo $?
0

这种联系似乎很好:

代码语言:javascript
运行
复制
jwnimmer@call-cps:~/tmp/wakka$ readelf -d main

Dynamic section at offset 0x3cf0 contains 31 entries:
  Tag        Type                         Name/Value
 0x0000000000000001 (NEEDED)             Shared library: [libdrake.so]
 0x0000000000000001 (NEEDED)             Shared library: [libstdc++.so.6]
 0x0000000000000001 (NEEDED)             Shared library: [libgcc_s.so.1]
 0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
 0x000000000000001d (RUNPATH)            Library runpath: [/home/jwnimmer/tmp/wakka/lib]
...

jwnimmer@call-cps:~/tmp/wakka$ ldd main
    linux-vdso.so.1 (0x00007ffe2c491000)
.... nothing is shown as 'missing' ...

为了提供帮助,您可能需要共享一个可复制的示例,说明您是如何构建的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73901263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档