如何在 Colab 运行时升级 libstdc++.so?

How to upgrade libstdc++.so on Colab runtime?

我想在 Colab 上 运行 一个 C++ 库,它需要一个版本的 libstdc++.so,它比 Colab 上安装的默认 g++ 7.x 提供的版本更新。此类要求是由于 g++ 7.x.

不支持的 C++17 功能

为此,我从 PPA 安装了最新的 g++ 编译器(和相应的 libstdc++.so)。但是,当我尝试导入使用更新的 g++ 编译器编译的库时,似乎 python 运行time 不知道 libstdc++.so 的更新,除非重新启动 运行time通过“运行时 -> 重启 运行time”。

由于重新启动 运行time 是一个丑陋的解决方法,并且可能对我的最终用户造成干扰,是否有更好的方法让当前 运行time 意识到 libstdc++.so 已更改?

我已经准备了一个 standalone notebook 它在一个简单的案例中显示了我的问题(使用 pybind11)。

谢谢

要安装和使用最新的 libstdc++,请执行以下操作:

  1. sudo add-apt-repository ppa:ubuntu-toolchain-r/test
  2. sudo apt install libstdc++-9-dev.
  3. 已安装的包含文件在 /usr/include/c++/9//usr/include/x86_64-linux-gnu/c++/9/ 内。
  4. 已安装的二进制库文件 (.a/.so) 在 /usr/lib/gcc/x86_64-linux-gnu/9/.
  5. 您可以通过dpkg -L libstdc++-9-dev.
  6. 列出软件包的已安装文件

现在您可以运行您的程序:

LD_LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/ your_program_name

以便它获得正确的路径和正确的 .so 文件。

我通过向 setup.py 添加以下选项解决了你笔记本的问题,之后你的笔记本不会打印任何错误:

extra_compile_args=["-std=c++11", '-static', '-static-libgcc', '-static-libstdc++'],
extra_link_args=['-static-libgcc', '-static-libstdc++'],

您还可以将所有必需的 .so 文件收集到 Python 模块的文件夹中,并将所有文件打包到 wheel .whl 文件中。无需在每台机器上 APT 安装所有 .so 依赖项。我认为 Python 是更干净的解决方案,可以将所有必要的 .so 文件发送到 .whl.