在目标机器上运行我的闭源应用程序时,我得到以下内容,该机器使用的是比我更旧的操作系统:
./myapp: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by ./myapp)
./myapp: /lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by ./myapp)
./myapp: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by ./myapp)
有没有办法降低所需的libstdc和libstdc ++版本或完全绕过这个检查而不将我的构建服务器移动到旧操作系统(我觉得非常令人沮丧),以及没有静态链接libstdc(这似乎是被禁止的)许可证)?
我已经检查了Linking against an old version of libc to provide greater application coverage,但这只解释了如何为某些特定符号执行此操作,而我需要为我的应用程序从glibc导入的每个符号执行此操作。
答案 0 :(得分:0)
要避免使用这些未定义的符号,您必须使用不同的GCC版本进行编译。
如果您不想降级到历史性的GCC版本,现在有几个发行版为较旧的发行版提供了更新的GCC版本,例如带有工具链模块的SUSE和带有Developer Toolset的Red Hat。这些编译器提供兼容的ABI,因此与操作系统的集成相对轻松。