【问题标题】:Why do I get Error while loading shared libraries为什么加载共享库时出现错误
【发布时间】:2019-07-02 12:58:06
【问题描述】:

我使用 /home/ 中的 Fedora 在我的计算机上从源代码安装了 wxWidgets 3.1.2... 我正在尝试从 https://docs.wxwidgets.org/stable/overview_helloworld.html 构建和运行一个 Hello world 示例。它通过键入编译而没有任何错误

g++ widgetTest.cpp `wx-config --cxxflags --libs` -o widgetTest

但是在./widgetTest 之后,我的shell 中得到了./widgetTest: error while loading shared libraries: libwx_gtk2u_xrc-3.1.so.2: cannot open shared object file: No such file or directory

stackoverflow 中的一个答案是在/usr/lib 中复制整个库,我做到了。然后它不起作用,我又得到了同样的结果。

(gtk2-devel和gtk3-devel我在安装wxWidgets之前已经安装好了)

ldd ./widgetTest 返回:

linux-vdso.so.1 (0x00007ffeacdcf000)
libwx_gtk2u_xrc-3.1.so.2 => not found
libwx_gtk2u_html-3.1.so.2 => not found
libwx_gtk2u_qa-3.1.so.2 => not found
libwx_gtk2u_core-3.1.so.2 => not found
libwx_baseu_xml-3.1.so.2 => /lib64/libwx_baseu_xml-3.1.so.2 (0x00007ffa3faea000)
libwx_baseu_net-3.1.so.2 => /lib64/libwx_baseu_net-3.1.so.2 (0x00007ffa3fa9a000)
libwx_baseu-3.1.so.2 => /lib64/libwx_baseu-3.1.so.2 (0x00007ffa3f7e9000)
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007ffa3f651000)
libm.so.6 => /lib64/libm.so.6 (0x00007ffa3f4cd000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007ffa3f4b2000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007ffa3f490000)
libc.so.6 => /lib64/libc.so.6 (0x00007ffa3f2ca000)
libexpat.so.1 => /lib64/libexpat.so.1 (0x00007ffa3f28b000)
libz.so.1 => /lib64/libz.so.1 (0x00007ffa3f271000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007ffa3f26b000)
libsecret-1.so.0 => /lib64/libsecret-1.so.0 (0x00007ffa3f214000)
libgobject-2.0.so.0 => /lib64/libgobject-2.0.so.0 (0x00007ffa3f1be000)
libglib-2.0.so.0 => /lib64/libglib-2.0.so.0 (0x00007ffa3f09e000)
liblzma.so.5 => /lib64/liblzma.so.5 (0x00007ffa3f073000)
/lib64/ld-linux-x86-64.so.2 (0x00007ffa3fb26000)
libgcrypt.so.20 => /lib64/libgcrypt.so.20 (0x00007ffa3ef55000)
libgpg-error.so.0 => /lib64/libgpg-error.so.0 (0x00007ffa3ef32000)
libgio-2.0.so.0 => /lib64/libgio-2.0.so.0 (0x00007ffa3ed86000)
libpcre.so.1 => /lib64/libpcre.so.1 (0x00007ffa3ed13000)
libffi.so.6 => /lib64/libffi.so.6 (0x00007ffa3ed06000)
libgmodule-2.0.so.0 => /lib64/libgmodule-2.0.so.0 (0x00007ffa3ed00000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007ffa3ecd3000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x00007ffa3ecb9000)
libmount.so.1 => /lib64/libmount.so.1 (0x00007ffa3ec5c000)
libpcre2-8.so.0 => /lib64/libpcre2-8.so.0 (0x00007ffa3ebd4000)
libblkid.so.1 => /lib64/libblkid.so.1 (0x00007ffa3eb81000)
libuuid.so.1 => /lib64/libuuid.so.1 (0x00007ffa3eb78000)
librt.so.1 => /lib64/librt.so.1 (0x00007ffa3eb6e000)

【问题讨论】:

  • 您能否编辑您的问题以包含来自wx-config --cxxflags --libs 的输出?你在哪里安装库(在哪个目录中,例如libwx_gtk2u_xrc-3.1.so.2)?
  • 在执行库之前在终端中尝试export LD_LIBRARY_PATH=/path/to/library:$LD_LIBRARY_PATH
  • @MikevanDyke 不起作用(相同)
  • 我说得对吗libwx_gtk2u_xrc-3.1.so.2 是一种(某种)依赖关系?
  • 它是一个共享库,用于针对源文件进行构建。 wc-config... 的输出有一个 -lwx_gtk2u_xrc 标志(或其他单位,我们不知道,因为你没有发布),它指示 gcc 链接到库。检查您的系统上是否有 libwx_gtk2u_xrc-3.1.so* 文件,在 /usr/lib 或 /lib 或 /usr/lib64 或 /usr/local/lib 等。如果没有,请安装它。

标签: c++ linux wxwidgets


【解决方案1】:

在打开可执行文件(从同一终端)之前,在终端上写入export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib。为了节省每次都这样做,将该行添加到您的 ~/.bashrc 或类似文件中。 https://wiki.wxwidgets.org/Compiling_and_getting_started

【讨论】:

    猜你喜欢
    • 2015-06-28
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-29
    相关资源
    最近更新 更多