我想和Gurobi一起建造德雷克,现在有几个问题。我应该指出,我正在将drake作为一个包处理在我的ROS工作区中,而且到目前为止一直运行得很好。
--config=gurobi
成功构建并运行一个测试文件后,我得到了错误:/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
时,这种情况不会发生。
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工作区组织为
test_ws/
build/
devel/
...
src/
drake/
simple_test/
CMakeLists.txt
package.xml
test.cpp
我的CMakeLists.txt
包含以下内容:
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)
发布于 2022-09-29 21:27:42
我还没有研究第一个问题。
对于第二个问题,我认为是Drake安装程序中的一个bug (参见https://github.com/RobotLocomotion/drake/issues/18007)。但是无论如何,不要试图连续安装德雷克两次,这是不健全的。在尝试新安装之前,您应该始终对旧安装进行rm
。
发布于 2022-09-29 22:45:52
因为(1)我不能复制。
首先,我通过以下方式安装了德雷克最新的主人:
env GUROBI_HOME=/home/jwnimmer/Downloads/gurobi951/linux64 \
bazel run //:install --config=gurobi -- /home/jwnimmer/tmp/wakka
这应该与对该文件夹运行cmake && make install
相同。
然后,我构建并链接了一个示例程序:
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
这种联系似乎很好:
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' ...
为了提供帮助,您可能需要共享一个可复制的示例,说明您是如何构建的。
https://stackoverflow.com/questions/73901263
复制相似问题