【问题标题】:error while loading shared libraries: libwx_gtk3u_core-3.1.so.3: cannot open shared object file: No such file or directory加载共享库时出错:libwx_gtk3u_core-3.1.so.3:无法打开共享对象文件:没有这样的文件或目录
【发布时间】:2020-11-18 21:38:22
【问题描述】:

我全新安装了 Ubuntu 18.04.4LTS 和 wxWidgets 3.1.4。当我尝试使用以下命令执行 wxWidgets 二进制文件时: ./gpCalculator

我收到错误消息:
./gpCalculator: error while loading shared libraries: libwx_gtk3u_core-3.1.so.3: cannot open shared object file: No such file or directory

这是 ldd ./gpCalculator 下面的输出:

linux-vdso.so.1 (0x00007ffcabd9c000)
libwx_gtk3u_core-3.1.so.3 => not found
libwx_baseu-3.1.so.3 => not found
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007faa0bf17000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007faa0bcff000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007faa0b90e000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007faa0b570000)
/lib64/ld-linux-x86-64.so.2 (0x00007faa0c524000)

任何建议或帮助将不胜感激。这是一个学校项目。 gitub 仓库是https://github.com/alvindera97/Engineering-Grade-Pending-C- 如果您想访问二进制文件本身和源代码。

谢谢你的期待!

【问题讨论】:

    标签: c++ linux wxwidgets


    【解决方案1】:

    您必须安装这些库。

    错误提示丢失(找不到。)

    libwx_gtk3u_core-3.1.so.3 => not found
    libwx_baseu-3.1.so.3 => not found
    

    安装命令:

    apt-get install libwxgtk-webview3.0-gtk3-0v5 libwxgtk-media3.0-gtk3-0v5

    如果你想知道哪个包提供了文件,你可以安装和更新(以root身份):

    root@desktop:~# apt-get install apt-file
    root@desktop:~# apt-file update
    

    然后找到:

    manuel@desktop:~/projects$ apt-file find wx_gtk3u
    
    libwxgtk-media3.0-gtk3-0v5: /usr/lib/x86_64-linux-gnu/libwx_gtk3u_media-3.0.so.0
    libwxgtk-media3.0-gtk3-0v5: /usr/lib/x86_64-linux-gnu/libwx_gtk3u_media-3.0.so.0.4.0
    libwxgtk-media3.0-gtk3-dev: /usr/lib/x86_64-linux-gnu/libwx_gtk3u_media-3.0.so
    libwxgtk-webview3.0-gtk3-0v5: /usr/lib/x86_64-linux-gnu/libwx_gtk3u_webview-3.0.so.0
    libwxgtk-webview3.0-gtk3-0v5: /usr/lib/x86_64-linux-gnu/libwx_gtk3u_webview-3.0.so.0.4.0
    libwxgtk-webview3.0-gtk3-dev: /usr/lib/x86_64-linux-gnu/libwx_gtk3u_webview-3.0.so
    

    这会为您提供包:libwxgtk-media3.0-gtk3-0v5libwxgtk-webview3.0-gtk3-dev,其中出现了该名称。

    如果您正在使用已编译的二进制文件(程序),则必须安装用于在原始 linux 安装中编译该程序的库(相同版本,或者通常更现代。)

    如果你不能安装这些,至少在 Linux 上,你可以从源代码编译所有内容:库、程序等......

    (一些cmets之后的解释。)

    事实上,您正在使用已编译的程序,而我的输出完全相同:

     
    manuel@desktop:~/projects/Engineering-Grade-Pending-C- (master)$ ./gpCalculator 
    ./gpCalculator: error while loading shared libraries: libwx_gtk3u_core-3.1.so.3: cannot open shared object file: No such file or directory
    

    查看 repo 给出:

    manuel@desktop:~/projects/Engineering-Grade-Pending-C- (master)$ l
    total 8,1M
    -rw-r--r-- 1 manuel manuel 230K jul 29 23:10 gp_and_cgpa_calculator.cpp
    -rwxr-xr-x 1 manuel manuel 597K jul 29 23:10 gpCalculator*
    -rw-r--r-- 1 manuel manuel 7,3M jul 29 23:10 gpCalculator.exe
    -rw-r--r-- 1 manuel manuel 1,2K jul 29 23:10 README.md
    

    gpCalculator 是找不到库的可执行文件。

    问题不在于编译或分发,问题在于您永远不应该运行来自您不知道和不信任的来源的软件。如果你想运行它,只需获取源代码,编译并使用它。

    这个gpCalculator 可执行文件可能只是将你所有的硬盘信息发送给任何人。

    话虽如此,要运行该程序,您只需要按照我所说的进行:安装 缺少的库或编译并安装所有这些库。 (不需要分发任何东西。)

    【讨论】:

    • 这是我从终端得到的回复:E: Unable to locate package libwx_gtk3u_coreE: Unable to locate package libwx_gtk3u_core
    • @Alvindera97 是的,抱歉,库名称错误。无论如何,请输入您的版本号,我使用的是旧系统。
    • 我尝试运行您添加到答案apt-get install libwxgtk-webview3.0-gtk3-0v5 libwxgtk-media3.0-gtk3-0v5 的命令,但仍然收到相同的错误消息:./gpCalculator: error while loading shared libraries: libwx_gtk3u_core-3.1.so.3: cannot open shared object file: No such file or directory。我不确定如何正确猜测版本号,但是,我安装了 3.1.4 版的 wxWidgets ....
    • @Alvindera97 版本号,我举个例子,你的版本号不一样。
    • 非常感谢。我现在正在努力。完成后我会尽快回复您
    【解决方案2】:

    @曼努埃尔

    嗨,

    您不必编译和安装用于构建程序的库。

    当你说你编译wxWidgets 3.1.4时,这是否意味着你跑了:

    configure <set_of_options>
    make
    make install
    ldconfig
    

    或者你只是跑了:

    configure
    make
    

    现在,所有不同的 Linux 发行版(和 Unix 发行版)都有自己的存储库。每个 *nix 发行版都有自己的方式从所述发行版中获取软件包。每个 *nix 发行版与在此发行版中标记它们 stable 的软件包的工作方式不同,以便用户进行升级。

    因此,对于开发人员来说,创建不同的方式在 *nix 上分发应用程序“简直是一场噩梦”。因此,*nix 开发人员可以创建分发脚本和/或要求 *nix 维护人员将他们的软件包含在存储库中。

    这样分发脚本将处理程序的每个依赖项。该脚本还将负责将所需库升级到较新版本的需要 - 这些库的维护者将必须重新编译您的软件,确保它按预期工作,将其标记为稳定并完成它。然后他们会适当地更新分发脚本。

    最后 - 在 *nix 上分发不是您的任务,编写/更新这样的分发脚本是分发维护者的任务。或者编写一个适当的文档/示例,以便您可以执行此操作并将其提交给分发维护者以将其包含在他们的包树中。

    我希望现在更清楚了。

    [编辑]

    引用上一个答案中的一个回复:

    此时,我不知道是否仍然可以运行 同一个应用程序。由于我有源代码和 wxWidgets 的安装,我 能够将二进制文件重新编译成一个新文件并运行程序, 源代码是用 wxWidgets3.1.3 编写和编译的,但是我 安装了 wxWidgets3.1.4,我不想重新编译。我是 只尝试运行二进制文件。如果我想运行这个程序 另一个linux安装,这是否意味着我必须重新安装 wxWidgets 并重新编译程序?我真的很困惑。谢谢

    [/编辑]

    【讨论】:

    • 1) 我从来没有说过“必须编译并安装构建程序的库”。我说过只需安装;如果那些(版本)不存在,你总是可以编译它们。 2)我从来没有说过我编译过任何东西。 2) OP 不是要求所有不同的 Linux 发行版(和 Unix 发行版),而只是要求 Ubuntu 18.04.4LTS 和 wxWidgets 3.1.4。 3) 我们不是在谈论分发软件,而是在谈论使用正确的版本。这是一个Github repo。
    • 要补充前面的评论,我不得不说原始仓库没有任何关于依赖关系或版本号的信息。它只说所有代码都是用 Linux 操作系统编写的,特别是 Ubuntu 18.04.04,但没有说库是否被更改(版本)。所以 “这不是你的任务在 _nix" 上分发你说的声明,只是没有意义。 OP 正在关注某个没有任何质量且不意味着准备分发的代码/程序。我刚刚给出了一些使用该软件的建议。
    • @Manuel,回答您的观点: 1. 是的 - 这是正确的。但是,您需要知道程序是用什么版本构建的,以便首先安装它们。 2. 不正确 - 请参阅编辑。 3. 好的,但是为了生成能够成功运行的二进制文件,您需要编译正确版本的 wxWidgets,对吧?它应该在 README.md 或文档中给出。我同意这是不正确的。正如您成功指出的那样,存储库的作者应该注意提供一个好的版本或指导如何升级版本。
    • 请原谅我迟到的回复。我是一个 python 人,这是我第一次使用 C++,所以我知道代码质量很差。我编译了代码以使用 wxWidgets 3.1.3 生成二进制 gpCalculator。现在我新安装了 ubuntu 18.04,我安装了 wxWidgets 3.1.4,但我无法运行二进制文件。这就是我开始这个问题的起点。
    • 在 wxWidgets foum:forums.wxwidgets.org/… 上询问了更多问题后,有人向我解释说,我可以在下载 wxWidgets 源代码 [构建应用程序的版本] 后运行二进制文件,并且构建了源代码[我显然不必做make install] 一切都应该工作......如果我详细了解共享,我很可能不会使用'allow-shared-构建wxWidgets图书馆的旗帜。是的,应用程序的大小会增加,但无需额外配置即可使应用程序正常运行
    猜你喜欢
    • 2019-11-19
    • 1970-01-01
    • 2016-05-22
    • 1970-01-01
    • 1970-01-01
    • 2015-06-07
    • 2021-05-18
    • 2017-01-20
    • 2019-02-16
    相关资源
    最近更新 更多