libstdc&x2B+;GLIBCXX版本错误 < >我用G++编译我的计算机中的C++程序,并把可执行文件传输到我的大学服务器上,得到 ./main: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by ./main) ./main: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by ./main) ./main: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by ./main)

libstdc&x2B+;GLIBCXX版本错误 < >我用G++编译我的计算机中的C++程序,并把可执行文件传输到我的大学服务器上,得到 ./main: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by ./main) ./main: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by ./main) ./main: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by ./main),c++,g++,libstdc++,C++,G++,Libstdc++,该程序在我的计算机上运行良好,我没有在我的大学服务器上安装任何新软件的特权 有什么帮助吗? 谢谢libstdc++.6的版本在大学计算机上太旧了。您有两个选择: 静态链接到-static。C++库将被合并到最终的二进制文件中。 将正确的版本复制到主目录中的某个位置,然后在生成时通过传递-rpath/path/to/library/directory引用它,或者将LD_library\u path环境变量设置为指向包含较新libstdc++.so.6的目录 您试图编译什么平台?i、 e.“你的电脑

该程序在我的计算机上运行良好,我没有在我的大学服务器上安装任何新软件的特权

有什么帮助吗?
谢谢

libstdc++.6的版本在大学计算机上太旧了。您有两个选择:

  • 静态链接到
    -static
    。C++库将被合并到最终的二进制文件中。
  • 将正确的版本复制到主目录中的某个位置,然后在生成时通过传递
    -rpath/path/to/library/directory
    引用它,或者将
    LD_library\u path
    环境变量设置为指向包含较新
    libstdc++.so.6
    的目录

  • 您试图编译什么平台?i、 e.“你的电脑”和“大学服务器”

    您可以尝试使用静态链接选项编译程序。这将生成一个静态链接的可执行文件,其中已加载所有库依赖项


    干杯,

    在家中链接程序时,您似乎正在使用标准库作为共享库(默认行为)

    因此,您的链接器不是真正“链接”库,而是解析一些符号并执行另一个操作,同时将库的实际加载延迟到运行时

    当您在大学计算机上执行程序时,加载程序(实际将程序加载到内存中并抛出主线程的程序)会查找程序所需的库并尝试加载它们(如果您感到好奇,请在linux中查找
    LD_LIBRARY_PATH

    这里的问题是,你正在将你家里的程序与stdlib的一个版本相链接,而这个版本与你在大学里的版本不同。因此,当加载程序尝试查找库时,它失败,因此程序无法运行

    解决方案:

    a) 要避免所有这些问题,请使用静态链接而不是动态链接。我不确定stdlib是否可以做到这一点,但我认为值得对其进行测试(请参阅:并查找“-static”标志)

    b) 你可以试着在你的大学计算机上编译你的程序,这样它就会使用那里的版本

    c) 尝试了解安装在那里的stdlib版本,并在编译机器中安装相同的版本

    d) 您可以尝试将stdlib的主版本复制到应用程序所在的文件夹中。这通常是有效的,因为加载程序在查找环境变量
    LD\u LIBRARY\u path
    (linux)中设置的路径之前,倾向于在当前应用程序文件夹中搜索共享库

    希望有帮助

    附言: 在这里,您可以很好地介绍静态库与共享库/动态库


    这里()是一个不太好但更完整的库描述。

    您可以将
    /usr/lib/libstdc++.so.6
    复制到服务器主目录的子目录中,比如
    ~/lib
    ,然后运行:

    $ LD_LIBRARY_PATH=$HOME/lib ./main
    
    或者如果你愿意的话

    $ export LD_LIBRARY_PATH=$HOME/lib
    $ ./main
    

    程序应该加载你的私有库而不是系统库。

    大学里的libstdc++版本是什么?@phoxis,3.4.8或更高版本。非常感谢你,静态链接会使程序在大学服务器上执行时运行变慢吗?@Tarek,静态链接有各种优点和缺点,但我认为你不会看到太大的速度差异,真的。正如@bdonian所说的,有很多优点和缺点,但在你的情况下,主要的一个是尺寸。静态链接的程序比动态链接的程序大,因为在静态链接的程序中,库“包含”在可执行文件中。比
    -static
    更好的选择是
    -static libstdc++
    ,它只静态链接libstdc++,不是整个程序。比
    -static
    更好的选择是
    -static libstdc++
    ,它只静态链接libstdc++而不是整个程序。