必须安装 libstdc++43-devel-32bit(而非通用版),因 oracle 11gr2 基于 suse 11 的 gcc 4.3.x abi 构建,其安装器依赖 32 位 stdc++ 符号;仅装 64 位或高版本会导致链接失败,且需确保 /usr/lib/libstdc++.so.6 指向兼容的 6.0.10 版本。
在 suse linux(尤其是 suse 11)上安装 oracle 11g 时,libstdc++-devel 包不是可有可无的依赖——缺少它会导致 runinstaller 在链接阶段失败,报错类似 undefined reference to 'std::string::...' 或直接卡在“checking operating system requirements”之后不继续。
为什么必须装 libstdc++-devel-4.3(而非默认版本)
SUSE 11 自带的 GCC 是 4.3.x 系列,Oracle 11gR2 的安装程序和数据库二进制文件全部基于该 ABI 构建。若只装了 libstdc++43-devel 但漏掉 -32bit 变体,或装了更高版本(如 4.8+)的 libstdc++-devel,会出现符号不兼容或链接器找不到 32 位 stdc++ 符号的问题。
-
libstdc++43-devel-4.3.4_20091019-0.7.35是官方验证过的最小可用版本 - 必须同时安装
libstdc++43-devel-32bit(即使系统是 64 位),因为 Oracle 安装器内部调用的部分工具(如make脚本、genclntsh)会混合调用 32 位库 - 不要尝试用
zypper install libstdc++-devel—— 这会拉取最新版,大概率不兼容
如何精准安装 libstdc++43-devel-32bit
在 SUSE 11 上,libstdc++43-devel-32bit 不在默认仓库中,需手动指定源或从安装介质提取。最稳妥的方式是:
- 检查是否已存在:
rpm -q libstdc++43-devel-32bit,若返回package libstdc++43-devel-32bit is not installed则需安装 - 优先从 SUSE 11 SDK DVD 挂载点查找:
find /media/SUSE* -name "libstdc++43-devel-32bit*.rpm" - 若无 DVD,从 SUSE 官方归档镜像下载对应架构包(x86_64):
wget https://download.suse.de/ibs/SUSE:/SLE-11-SP4:/Update:/Products:/SLES11-SP4:/Standard/x86_64/libstdc++43-devel-32bit-4.3.4_20091019-0.7.35.x86_64.rpm - 强制安装(忽略依赖警告,只要不缺
libgcc43就可):rpm -ivh --force --nodeps libstdc++43-devel-32bit-4.3.4_20091019-0.7.35.x86_64.rpm
验证安装是否真正生效
光装上 RPM 不代表 Oracle 能识别到。必须确认头文件和库路径被正确暴露:
- 检查头文件是否存在:
ls -l /usr/include/c++/4.3/i686-suse-linux/bits/(应有大量basic_string.h等) - 检查 32 位库符号表:
nm -D /usr/lib/libstdc++.so.6 | grep string::assign,应输出若干符号行 - 运行 Oracle 安装前预检脚本:
./runInstaller -executePrereqs,若不再报libstdc++-develmissing 就说明通过 - 注意:
rpm -q libstdc++43-devel和rpm -q libstdc++43-devel-32bit必须都返回版本号,缺一不可
最容易被忽略的是:即使 rpm -q 显示已安装,若 /usr/lib/libstdc++.so 是软链到高版本(如 6.0.21),而 Oracle 安装器硬编码查找 libstdc++.so.6.0.10,仍会失败。此时必须用 ln -sf /usr/lib/libstdc++.so.6.0.10 /usr/lib/libstdc++.so.6 临时对齐 —— 这个细节几乎没人提,但实际踩坑率极高。
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!











