【发布时间】:2021-12-20 17:46:55
【问题描述】:
我想构建一个可以在所有具有 libc >= 2.31 的 Linux 系统上启动的 C++ 应用程序。在我的构建系统(Ubuntu)上,我有 libc 2.34。 这是我的(空)应用程序:
int main() {
return 0;
}
我使用g++ -o app app.cpp 构建它,根据以下结果,我了解到我的应用程序需要 libc >= 2.34 才能运行。我的理解正确吗?
$ nm -D app
w __cxa_finalize@GLIBC_2.2.5
w __gmon_start__
w _ITM_deregisterTMCloneTable
w _ITM_registerTMCloneTable
U __libc_start_main@GLIBC_2.34
如何为 libc __asm__ (".symver __libc_start_main, __libc_start_main@GLIBC_2.2.5");”(基于我对this post的理解),但它并没有改变任何东西。
【问题讨论】:
-
可能最简单的解决方案是在 docker 中安装较旧的 Ubuntu 版本,然后在那里编译。
-
您需要一个
symver指令来处理程序使用的每个 符号。一旦你离开玩具阶段,这就是棘手的。您需要以某种方式或方式按照 HolyBlackCat 的建议进行操作。