我使用 gcc 4.9.2 (libstdc++.so.6.0.20) 构建了一个项目。当我想在配备 gcc 4.6.3 (libstdc++.so.6.0.16) 的虚拟机上运行该程序时,我必须以与构建机器上相同的版本提供 libstd++/libc。我按照以下步骤操作:
- 导出 LD_LIBRARY_PATH(使用正确的内核版本和 libstdc++ 自定义 glibc 构建)
- 运行命令: LD_DEBUG=libs LD_PRELOAD=/path_to_custom_glibc/ld-linux-x86-64.so.2 myApp
我得到一个输出,通知程序在调用init:/path_to_custom_glibc/libpthread.so.0
可能出了什么问题?
编辑1 核心转储不显示发生分段错误的位置,但 LD_DEBUG=all 返回比 LD_DEBUG=libs 更精确的信息:
符号=__libc_dl_error_tsd;
在 file=/path_to_custom_glibc/libc.so.6 [0] 3539 中查找:将文件 /path_to_custom_glibc/libpthread.so.0 [0] 绑定到 /path_to_custom_glibc/libc.so.6 [0]:正常符号 `__libc_dl_error_tsd' [GLIBC_PRIVATE ] 分段错误(核心转储)