νμ¬ find_library
λ‘λ λ λΌμ΄λΈλ¬λ¦¬λ₯Ό λ¨Όμ 쿼리νλ λμ LD_LIBRARY_PATH
λ°λΌ λΌμ΄λΈλ¬λ¦¬ κ²μμΌλ‘ λ°λ‘ λ¨μ΄μ§λλ€. νμ¬ 3 κ°μ§ ꡬν μ€ νλ :
https://github.com/ros2/rmw_implementation/blob/32c3de1/rmw_implementation/src/functions.cpp#L77
μ΄ μ½λκ° νμ¬λ‘λ λ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ νΈνκ³ , λ°νμμ DDS ꡬν (μ : μ¬ν μ¬λ‘ λ¨μν λ±)μ μ ννλ κΈ°λ₯μ μνμ§ μλ μ ν리μΌμ΄μ μ½λλ₯Ό μ§μνκ³ λμ RPATHκ° μ μ ν λΌμ΄λΈλ¬λ¦¬λ₯Ό λ§ν¬νλ κ²μ΄ μ’μ κ²μ λλ€.
λ€μμ Linuxμμ μλνλ νλ‘ν νμ
μ
λλ€.
https://github.com/EricCousineau-TRI/rcpputils/commit/b66a3d9e02ace44e6c3b6022eeb3447b121d3311
Drake μΆμ²μμ Cribbing :
https://github.com/RobotLocomotion/drake/blob/4c6246197/common/find_loaded_library.cc
μ΄ Bazel μ¬ν νλ‘μ νΈμ λνμ΄ μ»€λ°μμ μ΄μ λ§ν¬μ RMW ꡬνμ μ§μ νκ±°λ νκ²½ λ³μλ₯Ό μ°κΈ° ν μ μμ΅λλ€.
https://github.com/EricCousineau-TRI/repro/commit/cea11026722b340580257564dc49cb0f59b55178
@ dirk-thomas λλ μ΄κ²μ΄ λ§€μ° μ μ©νλ€κ³
λΉμ μ΄ μ΄κ²μ κ³ λ €νλλ‘ μ΄λ€ (μλ κ²½μ°) μ¦κ±°κ° μλμ§ λ¬Όμ΄λ΄λ λ κΉμ?
λ°°ν¬νμ λͺ©νλ μμ μ± λ°± ν¬νΈκ° λ²κ·Έ μμ μ μ©μμ νμΈνλ κ²μ λλ€. ν₯μλ κΈ°λ₯μ λ€μ λ°°ν¬νμ λμμΌλ‘ν΄μΌν©λλ€.
Dashingμ 첫 λ²μ§Έ ν μ€νΈ ν¨ν€μ§λ 4 μ 첫째 μ£Όμ μ 곡 λ μμ μ λλ€.
μ, μ’μ κ² κ°μ΅λλ€. https://github.com/ros2/rcpputils/issues/3 μ λ³ν©μ
setcap
λ₯Ό ν΅ν΄ μ€μ λ κΈ°λ₯μ΄ νμν ros2 λ
Έλκ°μμ΄ μ€ν μ€μ LD_LIBRARY_PATH
μ΄ μλ΅λ©λλ€. κ·Έλμ μ°λ¦¬λ 곡μ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ°ΎκΈ° μν΄ λ°μ΄λ리μμ RPATH
λ₯Ό μ€μ νκ³ μμ΅λλ€. κ·Έλ¬λ find_library_path
λ LD_LIBRARY_PATH
μ μμ‘΄νλ―λ‘ λ
Έλλ
terminate called after throwing an instance of 'rclcpp::exceptions::RCLError'
what(): failed to initialized rcl init options: failed to find shared library of rmw implementation. Searched rmw_fastrtps_cpp, at /tmp/binarydeb/ros-eloquent-rmw-implementation-0.8.2/src/functions.cpp:130, at /tmp/binarydeb/ros-eloquent-rcl-0.8.3/src/rcl/init_options.c:55
λ΄κ° μ¬λ°λ₯΄κ² μ΄ν΄νλ€λ©΄ @ EricCousineau-TRIμ μ μμ΄μ΄ λ¬Έμ λ₯Ό ν΄κ²°ν κ²μ λλ€. λ€μ 릴리μ€μμμ΄ κΈ°λ₯μ μ¬μ©ν μ μμ΅λκΉ? λλ ν΄κ²° λ°©λ²μ λν μ μ μ¬νμ΄ μμ΅λκΉ?
@ EricCousineau-TRIμ λν΄ λ°λ³΅ ν κ³νμ λκΉ?
λ΄κ° μ¬λ°λ₯΄κ² μ΄ν΄νλ€λ©΄ @ EricCousineau-TRIμ μ μμ΄μ΄ λ¬Έμ λ₯Ό ν΄κ²°ν κ²μ λλ€.
@wieset μ°ΎμΌλ €κ³ /λ‘λνλ €λ λΌμ΄λΈλ¬λ¦¬κ° μμ§λ‘λλμ§ μμ κ²½μ° μ΄λ»κ² λ¬Έμ λ₯Ό ν΄κ²°ν μ μμ΅λκΉ?
@ivanpauno μλ§ κ°κΉμ΄ μ₯λμ (~ 6 κ°μμμ 1 λ ) μνκΉκ²λ :(
@ dirk-thomas @ EricCousineau-TRIμ μμ μ½λλ₯Ό 보μκ³ λΉμ μ΄ λ§μ΅λλ€. λΌμ΄λΈλ¬λ¦¬κ° μμ§λ‘λλμ§ μμ κ²½μ° λ΄ λ¬Έμ λ₯Ό ν΄κ²°ν μ μμ΅λλ€. νλ‘κ·Έλ¨ μμμλ‘λλλλ‘ λΉλ ν λ λ§ν¬ ν μ μμκΉμ?
κ·Έλ¬λ λ°νμμλ‘λλ₯Ό μ μ§νκΈ° μν΄ λ κ°μ§ μ΅μ
μ΄ νμλ©λλ€. RPATH
λ₯Ό κ²μν΄μΌν©λλ€. CMAKE_INSTALL_RPATH
ν΅ν΄ μ€μ ν μ μκ±°λ LD_LIBRARY_PATH
λμ λ€λ₯Έ νκ²½ λ³μλ₯Ό μ¬μ©ν μ μμ΅λλ€ RMW_LIBRARY_PATH
. https://github.com/ros2/rcpputils/issues/40 μμ λ μ΅μ
μ λͺ¨λ μΈκΈνμ΅λλ€
@wieset μ΄ μ¬μ© μ¬λ‘μ rpathλ₯Ό μ¬μ©νλλ‘ λΉλλ₯Ό μ¬μ©μ μ§μ νλ κ²μ λ°©λ²μ²λΌ λ€λ¦½λλ€.
@ dirk-thomas λμνκ³ μ΄λ―Έ RPATH
μ (λ₯Ό) μ¬μ©νμ¬ λ€λ₯Έ λͺ¨λ λΌμ΄λΈλ¬λ¦¬λ₯Όλ‘λνκ³ μμ΅λλ€. κ·Έλ¬λ κ·Έκ²μ rmw λΌμ΄λΈλ¬λ¦¬μ λν find_library_path()
κ° νμ¬ κ±°κΈ°μμ 보μ΄μ§ μλλ€λ μ¬μ€μ μ΄ν΄νμ§ λͺ»ν©λλ€. μλλ©΄ λ΄κ° λκ°λ₯Ό λμΉκ³ μμ΅λκΉ?
κ·Έλ¬λ κ·Έκ²μ rtw λΌμ΄λΈλ¬λ¦¬μ λν
find_library_path()
κ° νμ¬ κ±°κΈ°μμ 보μ΄μ§ μλλ€λ μ¬μ€μ μ΄ν΄νμ§ λͺ»ν©λλ€.
λΉμ μ΄ μ³μ΅λλ€. μ΄ ν°μΌμ λ΄μ©μ λμ³€μ΅λλ€.
μ΄λ₯Ό μν΄ λ³λμ νκ²½ λ³μλ₯Ό λμ νλ κ²μ΄ ν©λ¦¬μ μΌμ§ λλ κΈ°μ‘΄ νκ²½ λ³μλ₯Ό λͺ μ μ μΌλ‘ μ€μ νκΈ° μν΄ μ€ν νμΌμ 루νΈλ‘ μ€νν λ νμΈν΄μΌνλμ§ κΆκΈν©λλ€.
λ΄κ° μλ ν LD_LIBRARY_PATH
λ setcap
/ setuid
μ€ν νμΌμ λν΄ μμ ν 무μλλ―λ‘ μ§μ μ€μ ν΄λ λμμ΄λμ§ μμ΅λλ€. http://man7.org/linux/man-pages/man8/ld.so.8.html μ°Έμ‘°
보μ μ νμ μ°ννκΈ° μν΄ ROS_LIBRARY_PATH
μ κ°μ μλ‘μ΄ νκ²½ λ³μλ₯Ό λμ
νλ κ²μ΄ μ’μ μκ°μΈμ§ νμ€νμ§ μμ΅λλ€. ld
λ κ·Έκ²μ λν΄ μμ§ λͺ»νκΈ° λλ¬Έμ νν°λ§νμ§ μμΌλ©° 보μ κ³ λ € μ¬νμΌλ‘ μΈν΄ LD_LIBRARY_PATH
무μν©λλ€.
μ΄ κ°μ μ¬νμ μΆκ° ν PRμ μμ λ‘κ² μ μνμμμ€ ( "μ§μ νμ"λ μ΄λΈλ‘ νμλ¨).
κ·Έκ²μ μ‘°μ¬ ν κ²μ λλ€!
https://github.com/ros2/rcpputils/pull/44 μμ pull μμ²μ μμ±νμ΅λλ€.
FWIW @hidmic , @iantheengineer , κ·Έλ¦¬κ³ μ λ TRIμ λ€λ₯Έ μ¬λλ€κ³Ό μ΄κ²μ λ ΌμνκΈ° μμνμ΅λλ€. λ¨Όμ λ΄λΆ μ©λλ‘ μ¬μ© λ λ€μ Drake μ κ°μ κ²λ€κ³Όμ ν΅ν©μΌλ‘ μ΄λν©λλ€.
ν , μμνλ λ° rcpputils::find_library_path()
μ΄ νμν μ΄μ κ° κΆκΈν©λλ€. λ¨μν rcutils_load_shared_library()
λλ rcpputils::SharedLibrary
λνΌμ μλ κ²½λ‘λ₯Ό μ 곡νλ©΄ dlopen
λ° LoadLibrary
κ° κ²½λ‘λ₯Ό κ²μνκ³ λ‘λ λ κ°μ²΄ νμΌμ μμ±ν©λλ€. λ λ€μ λν λ¬Έμμ λ°λ₯΄λ©΄ μ΄λ―Έλ‘λ λ κ°μ²΄ νμΌμ λ€μ κ°μ Έ μ€μ§ μμ κ²μ
λλ€. μ΄λ κ²νλ©΄ RPATH, LD_LIBRARY_PATH, RUNPATH, PATH λ° μ¬μ λ‘λ λ λΌμ΄λΈλ¬λ¦¬κ° κΈ°λ³Έμ μΌλ‘ μ μ©λ©λλ€.
CC @ EricCousineau-TRI @wieset @clalancette.
μ’μ, μ΄κ²μ λν 첫 λ²μ§Έ μ°λ₯΄κΈ° μν΄ # 320 λ° μ°κ²°λ PRμ μ°Έμ‘°νμμμ€. @wieset μ (κ°μ μ μΌλ‘) λ¬Έμ λ ν΄κ²°ν΄μΌν©λλ€. μ΄λ¬ν λ³κ²½μΌλ‘ μΈν΄ rcpputils::find_library_path
μ (λ) μΈλͺ¨ μκ²λ©λλ€ (μ½μ΄ ν¨ν€μ§μμ μ¬μ©).
@hidmic μ΄μ 320 λ²κ³Ό μΉκ΅¬λ€μ΄ λμ°© νμΌλ μ΄κ±Έ λ«μλ λ κΉμ?
μ€μ λ‘ μ°λ¦¬λ ν μ μμ΅λλ€. λ²νμ κ°μ¬λ립λλ€!
@hidmic μ λ§ κ°μ¬ν©λλ€. RUNPATH
μ (λ) μ¬μ ν μ λλ‘ μ±μ μ ΈμΌν©λλ€. https://github.com/ros2/rcpputils/pull/44 μμ @clalancette μ ν λ‘ μ κ³μνκ² μ΅λλ€ .
κ°μ₯ μ μ©ν λκΈ
ν , μμνλ λ°
rcpputils::find_library_path()
μ΄ νμν μ΄μ κ° κΆκΈν©λλ€. λ¨μνrcutils_load_shared_library()
λλrcpputils::SharedLibrary
λνΌμ μλ κ²½λ‘λ₯Ό μ 곡νλ©΄dlopen
λ°LoadLibrary
κ° κ²½λ‘λ₯Ό κ²μνκ³ λ‘λ λ κ°μ²΄ νμΌμ μμ±ν©λλ€. λ λ€μ λν λ¬Έμμ λ°λ₯΄λ©΄ μ΄λ―Έλ‘λ λ κ°μ²΄ νμΌμ λ€μ κ°μ Έ μ€μ§ μμ κ²μ λλ€. μ΄λ κ²νλ©΄ RPATH, LD_LIBRARY_PATH, RUNPATH, PATH λ° μ¬μ λ‘λ λ λΌμ΄λΈλ¬λ¦¬κ° κΈ°λ³Έμ μΌλ‘ μ μ©λ©λλ€.CC @ EricCousineau-TRI @wieset @clalancette.