我想了解在使用比Ubuntu的“默认”版本更新的GCC的引擎盖下发生了什么。
/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25/usr/lib/gcc/x86_64-linux-gnu/11/libstdc++.so我还注意到,系统提供的版本变得过分了!
/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.29g++-11编译hello-world应用程序,并通过ldd获得以下内容ldd a.out
linux-vdso.so.1 (0x00007ffc79ff7000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fd378546000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd378155000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fd377db7000)
/lib64/ld-linux-x86-64.so.2 (0x00007fd378b55000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fd377b9f000)所以它是链接到系统安装的libstdc++版本,而不是编译器提供的版本。二进制程序运行得很好。
我的问题是:
谢谢!
发布于 2021-10-21 07:50:56
在我从评论中得到这么多信息之后,我想我已经有了足够的理解来回答这个问题。谢谢大家!
libstdc++这意味着构建在旧libstdc++上的东西肯定会在较新的libstdc++上运行。- Start on Ubuntu 20.04.- Copy the example code from [here](https://en.cppreference.com/w/cpp/filesystem/directory_iterator).- Compile it with the default GCC 9 and `-std=c++17`.- This binary runs fine on Ubuntu 20.04.- Now, copy that binary over to a stock Ubuntu 18.04.- You'll get a "symbol not found error":./a.out: /usr/lib/x86_64-linux-gnu/libstdc++.so.6:未找到`GLIBCXX_3.4.26‘版本(./a.out要求)
libstdc++ (所以他们是相同的)。这将确保您在该机器上构建的任何内容也将在那里运行。https://stackoverflow.com/questions/69559867
复制相似问题