Oracle 10g → Oracle 19c 升级后问题解决方案(Pro*C 项目)

1️⃣ 升级背景

  • 旧环境:Oracle 10g + gcc 3.x → 支持隐式函数声明

  • 新环境:Oracle 19c + gcc ≥ 5.x → 遵循 C99/C11 标准,禁止隐式函数声明

  • 升级后主要问题:

    1. implicit declaration of function 'sqlcxt' 等错误

    2. 动态库找不到(运行时报错 libclntsh.so

    3. Pro*C 生成的 .c 文件缺少头文件


2️⃣ 升级流程建议

步骤 1:环境准备

  1. 安装 Oracle 19c Client / Database

  2. 安装新的 gcc 版本(≥5.x)

  3. 设置环境变量:

    export ORACLE_HOME=/opt/oracle/19c/client
    export PATH=ORACLE_HOME/bin:PATH
    export LD_LIBRARY_PATH=ORACLE_HOME/lib:LD_LIBRARY_PATH


步骤 2:验证动态库路径

复制代码
echo $LD_LIBRARY_PATH
ldd ./your_program  # 检查 .so 文件是否可找到

步骤 3:Pro*C 文件处理

  • 确认所有 .pc 文件在生成 .c 文件时包含必要的头文件:

    EXEC SQL INCLUDE sqlca;
    EXEC SQL INCLUDE sqlcpr;

  • 或在 Makefile proc 命令中加 include 参数:

    PROCFLAGS = userid=(USER_ID) mode=oracle sqlcheck=full dbms=native include=ORACLE_HOME/precomp/public


步骤 4:编译问题处理(implicit declaration)

方法 A:推荐(修复头文件)
  • 在生成的 .c 文件开头加:

    #include <sqlca.h>
    #include <sqlcpr.h>
    #include <oci.h> // 如果使用 OCI 函数

方法 B:临时编译参数(过渡)
  • 在 Makefile 中加入:

    CFLAGS += -Wno-implicit-function-declaration
    CFLAGS += -std=gnu89 # 可选

⚠️ 没有修复头文件可能导致运行时问题


步骤 5:gcc 版本控制

  • 在 Makefile 指定:

    CC = gcc-3 # 或者 gcc-9
    CFLAGS = -m32 -O2 -I.

  • 或临时修改 PATH:

    export PATH=/opt/gcc-3/bin:$PATH


小结

问题 解决方法
implicit declaration of function 修复 .c 头文件或 Makefile 增加 include,临时可加 -Wno-implicit-function-declaration
找不到动态库 设置 LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
Pro*C 生成 .c 文件缺少头文件 .pc 文件里加 EXEC SQL INCLUDE sqlca; sqlcpr; 或 Makefile proc include
gcc 版本差异 Makefile 指定 CC=gcc-x 或临时修改 PATH
相关推荐
枷锁—sha3 分钟前
【SRC】SQL注入快速判定与应对策略(一)
网络·数据库·sql·安全·网络安全·系统安全
郝学胜-神的一滴10 分钟前
深入解析C/S模型下的TCP通信流程:从握手到挥手的技术之旅
linux·服务器·c语言·网络·网络协议·tcp/ip
惜分飞16 分钟前
ORA-600 kcratr_nab_less_than_odr和ORA-600 4193故障处理--惜分飞
数据库·oracle
chian-ocean16 分钟前
CANN 生态进阶:利用 `profiling-tools` 优化模型性能
数据库·mysql
m0_5500246320 分钟前
持续集成/持续部署(CI/CD) for Python
jvm·数据库·python
AC赳赳老秦21 分钟前
代码生成超越 GPT-4:DeepSeek-V4 编程任务实战与 2026 开发者效率提升指南
数据库·数据仓库·人工智能·科技·rabbitmq·memcache·deepseek
啦啦啦_999934 分钟前
Redis-2-queryFormat()方法
数据库·redis·缓存
island13141 小时前
CANN GE(图引擎)深度解析:计算图优化管线、内存静态规划与异构 Stream 调度机制
c语言·开发语言·神经网络
玄同7651 小时前
SQLite + LLM:大模型应用落地的轻量级数据存储方案
jvm·数据库·人工智能·python·语言模型·sqlite·知识图谱
吾日三省吾码1 小时前
别只会“加索引”了!这 3 个 PostgreSQL 反常识优化,能把性能和成本一起打下来
数据库·postgresql