首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

解決 Oracle OCCI 在 VC6 無法 Debug 的編譯鏈接配置:忽略默認庫、調整庫順序與 WIN32COMMON 宏

     編輯:Oracle 資料庫相關知識

現象

  • VC6 + SP6 + Oracle 9.2 OCCI,Debug 構建報堆錯誤,String/Vector 釋放崩潰。
  • Statement::setXXX() 無效,ResultSet::getString() 首行正常、第二行起亂碼。

根因

VC6 默認鏈接配置與 OCCI 編譯期依賴的 CRT 版本、庫順序不匹配。OCCI 需特定宏 WIN32COMMON 激活正確模板實例化。

完整解決方案 (Project Settings → Link)

  1. 庫目錄:確保 oci.lib、oraocci9.lib 在 Library Path;oci/include 在 Include Path。
  2. 宏定義 (C/C++ → Preprocessor):
    WIN32COMMON
  3. 鏈接器輸入 → Object/Library Modules (順序關鍵):
    kernel32.lib user32.lib oci.lib msvcrt.lib msvcprt.lib oraocci9.lib
  4. 勾選 Ignore All Default Libraries。
  5. Ignore Libraries 填入:
    libc.lib
  6. Build → Debug 執行無堆錯誤,斷點單步正常。

官方 make.bat 參考 (OTN Sample)

:occimakeobj
ott userid=scott/tiger intype=%1.typ outtype=%1out.type code=cpp hfile=%1h.h cppfile=%1o.cpp mapfile=%1m.cpp attraccess=private
cl -GX -DWIN32COMMON -I. -I%ORACLE_HOME%\oci\include -I. -D_DLL -D_MT %1.cpp %1m.cpp %1o.cpp /link /LIBPATH:%ORACLE_HOME%\oci\lib\msvc oci.lib msvcrt.lib msvcprt.lib oraocci9.lib /nod:libc
goto end

:occimake
cl -GX -DWIN32COMMON -I. -I%ORACLE_HOME%\oci\include -I. -D_DLL -D_MT %1.cpp /link /LIBPATH:%ORACLE_HOME%\oci\lib\msvc oci.lib msvcrt.lib msvcprt.lib oraocci9.lib /nod:libc
goto end
  • /nod:libc 等同於忽略 libc.lib。
  • msvcrt.lib msvcprt.lib 必須在 oci.lib 之後、oraocci9.lib 之前,符合 OCCI 內部 CRT 依賴順序。

VC7+ (VS2003/2005/2008…) 簡化

新版編譯器 CRT 統一,OCCI 適配更好,通常僅需正常引用 oraocci10.lib/oraocci11.lib 即可 Debug,無需忽略默認庫。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved