【问题标题】:gcc 6.1 executable file link errorgcc 6.1 可执行文件链接错误
【发布时间】:2016-09-12 08:32:06
【问题描述】:

我最近将 gcc 6.1 引导到基于 ubuntu 的 linux 发行版中。 似乎它安装正确,因为我可以编译用 C 和 C++ 编写的程序。 我还可以运行已编译的可执行文件。 我还可以编译一个包含 C++11 和 C++14 功能的程序而不会出现任何错误,但是当我尝试运行这些可执行文件时出现以下错误;

./exec: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by ./ardi)

当我跑步时;

strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIB

该列表不包括所需的文件。 这是否意味着 gcc 6.1 在其他地方有这些文件。 如何找到需要的文件并重定向 gcc。我是 linux 系统的新手,甚至不确定我是否正确理解了错误。

【问题讨论】:

    标签: c++ linux c++11 gcc


    【解决方案1】:

    我认为这是因为您的主机 libstdc++ 库比新 g++ 中的库旧。因此,您可以尝试使用静态链接来避免使用 -static-libstdc++ g++ 标志的新标准库版本的外部依赖。此解决方案的代价是增加了生成的可执行文件的大小。

    【讨论】:

    • 如果我以这种方式编译可执行文件,但文件大小从 200kb 增加到 8mb。是每个文件增加 8mb 标准还是按照某个比例连接。以及这通常如何影响编译时间。
    • @fredric,在这种情况下,大小正好增加了附加到可执行文件的标准库的大小。它是对您将构建的每个可执行文件的恒定大小添加。编译时间不得改变,每个可执行文件的链接时间也略有增加。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    • 2017-08-04
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    • 2012-02-15
    • 1970-01-01
    相关资源
    最近更新 更多