簡體   English   中英

導出 LD_LIBRARY_PATH 后加載庫事件時出錯

[英]Error while loading the library event after export LD_LIBRARY_PATH

當我在我的項目中執行一個必要的步驟時:

ubuntu@cscsh:~$ soss dds_to_ros2.yaml 
\Error while loading the library ["/home/dbt/rosis_workspace/soss/install/soss-dds/lib/soss/dds/../../libsoss-dds.so"]: /home/dbt/rosis_workspace/soss/install/soss-dds/lib/soss/dds/../../libsoss-dds.so: undefined symbol: _ZTVN8eprosima8fastrtps28DisablePositiveACKsQosPolicyE
Could not find system handle for middleware of type [dds]
Failed to load middlewares!

所以我這樣做:

ubuntu@cscsh:~/rosis_workspace/soss/install/soss-dds/lib$ ldd libsoss-dds.so 
    linux-vdso.so.1 (0x00007fff5ef61000)
    libfastrtps.so.1 => /home/dbt/ros2_ws/src/eProsima/install/fastrtps/lib/libfastrtps.so.1 (0x00007f8ae4179000)
    libsoss-core.so => /home/dbt/rosis_workspace/soss/install/soss-core/lib/libsoss-core.so (0x00007f8ae3de1000)
    libyaml-cpp.so.0.5 => /usr/lib/x86_64-linux-gnu/libyaml-cpp.so.0.5 (0x00007f8ae3b67000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f8ae3948000)
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f8ae35bf000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f8ae33a7000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8ae2fb6000)
    libfastcdr.so.1 => /home/dbt/ros2_ws/src/eProsima/install/fastcdr/lib/libfastcdr.so.1 (0x00007f8ae2da3000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f8ae2b9f000)
    libtinyxml2.so.6 => /usr/lib/x86_64-linux-gnu/libtinyxml2.so.6 (0x00007f8ae298b000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f8ae4aae000)
    libboost_program_options.so.1.65.1 => /usr/lib/x86_64-linux-gnu/libboost_program_options.so.1.65.1 (0x00007f8ae270a000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f8ae236c000)


然后執行命令

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/dbt/ros2_ws/src/eProsima/install/fastrtps/lib

ubuntu@cscsh:~/ros2_ws/src/eProsima$ echo $LD_LIBRARY_PATH
/home/dbt/rosis_workspace/soss/install/soss-ros2-test/lib:/home/dbt/rosis_workspace/soss/install/soss-ros2/lib:/home/dbt/rosis_workspace/soss/install/soss-mock/lib:/home/dbt/rosis_workspace/soss/install/soss-json/lib:/home/dbt/rosis_workspace/soss/install/soss-dds/lib:/home/dbt/rosis_workspace/soss/install/soss-core/lib:/home/dbt/ros2_ws/src/eProsima/install/fastcdr/lib:/home/dbt/ros2_ws/src/eProsima/install/fastrtps/lib

但是當我執行時:soss dds_to_ros2.yaml。 仍然存在相同的錯誤消息。 有誰知道這有什么問題?

您的問題是找不到庫。 這是您的圖書館缺少預期的符號。 您很有可能只是安裝了錯誤版本的庫。 您要做的是運行以下命令:

# You will need the full path if you are not in that directory...
objdump -Tt /home/dbt/rosis_workspace/soss/install/soss-dds/lib/libsoss-dds.so | \
grep -w _ZTVN8eprosima8fastrtps28DisablePositiveACKsQosPolicyE

您可能會看到如下內容:

0000000000000000      DF *UND*  0000000000000000              _ZTVN8eprosima8fastrtps28DisablePositiveACKsQosPolicyE

這是正確的,但這意味着此符號未在此庫中定義,但它希望在ldd為您列出的庫之一中找到它。 我的第一個猜測是libsoss-core.so ,但我們正在尋找不兼容的版本,並且這個庫似乎與libsoss-dds.so具有相同的根目錄,因此這些版本絕對應該是兼容的。 如果您想查看庫是否包含特定符號,只需按照我上面的方式運行objdump即可。 在互聯網上快速搜索該庫符號后,我被帶到了 ros2 的ros2問題頁面 這讓我相信罪魁禍首庫實際上是libfastrtps.so.1 如果您運行以下命令:

objdump -Tt /home/dbt/ros2_ws/src/eProsima/install/fastrtps/lib/libfastrtps.so.1 | \
grep -w _ZTVN8eprosima8fastrtps28DisablePositiveACKsQosPolicyE

並且該庫包含libsoss-dds.so正在尋找的符號,這將是您的結果:

0000000000002cc0 g    DF .text  0000000000000011  Base        _ZTVN8eprosima8fastrtps28DisablePositiveACKsQosPolicyE

但由於您缺少此符號,您將不會收到任何結果。

因此,您的問題歸結為具有 2 個解決方案中的 1 個的不兼容庫。 您可以找到libsoss-dds.so的舊/新源或libfastrtps.so的舊/新源。 理想情況下,如果這些軟件包可通過您的發行版的 package 管理器獲得,請使用它為您完成工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM