我写了一段简单的PROC的程序myproc.hc,代码附在后面,在命令行方式下用proc myproc.hc 命令把myproc.hc编译成了myproc.c,然后我把myproc.c全部代码用vc的编译器编译时,总是报这样的错误error LNK2001: unresolved external symbol "void __cdecl sqlcxt(void * *,unsigned long *,struct sqlexd *,struct sqlcxp const *)" (?sqlcxt@@YAXPAPAXPAKPAUsqlexd@@PBUsqlcxp@@@Z)
Debug/testOra.exe : fatal error LNK1120: 1 unresolved externals
我想sqlcxt这个函数应该在一个dll中,可是我用dumpbin搜索了windowsNT下的所以目录的dll,都没有找到这个函数,我想请问,到底应该如何把.pc的文件编译成exe文件,万分谢谢!,请帮忙!!附:简单的proc程序代码:#include <stdio.h>
#include <string.h>
typedef char asciz;
char buf[20];
EXEC SQL BEGIN DECLARE SECTION;
EXEC SQL TYPE asciz IS STRING(20);
int acct;
double debit;
double new_bal;
VARCHAR status[65];
asciz uid[20];
asciz pwd[20];
EXEC SQL END DECLARE SECTION;
EXEC SQL INCLUDE SQLCA;
main()
{
extern double atof();
strcpy (uid,"scott");

strcpy (pwd,"tiger");

printf("\n\n\tEmbedded PL/SQL Debit Transaction Demo\n\n");
printf("Trying to connect...");
EXEC SQL WHENEVER SQLERROR GOTO errprint;
EXEC SQL CONNECT :uid IDENTIFIED BY :pwd;
printf(" connected.\n");
exit(1);

errprint:
EXEC SQL WHENEVER SQLERROR CONTINUE;
printf("\n\n>>>>> Error during execution:\n");
printf("%s\n",sqlca.sqlerrm.sqlerrmc);
EXEC SQL ROLLBACK RELEASE;
exit(1);
}

解决方案 »

  1.   

    你把下面这段内容做成一个BAT文件,调用时msmakes.bat myproc.hcrem - Build-File for C (/ C++) Programs w. MS Vis.C++ Compiler -\
    rem - Builds Progr. w. (Oracle9i) embedded SQL -\
    rem ------------------------------------------------------------\
    rem Usage: msmakes <prog_name>
    proc iname=%1.pc
    rem Compile and link the program.
    rem ????? To build a C++ program, change the source file extension to 
    rem and include the -Tp option.
    rem Include other libraries at the end of the link-command !
    cl -Id:\Oracle\Ora90\oci\include -Id:\Oracle\Ora90\precomp\public -I. -I%MSVCDir%\include -D_MT -D_DLL -Zi %1.c /link d:\Oracle\Ora90\precomp\lib\msvc\oraSQL9.LIB  /LIBPATH:%MSVCDir%\lib msvcrt.lib /nod:libc
      

  2.   

    webmin(webmin)  兄:
    我用的是Oracle For OpenVMS + Compaq C
    请问我该如何做,要包含哪个库文件?
      

  3.   

    strcpy (uid,"scott");
    strcpy (pwd,"tiger");
    应写成
    uid.len=sprintf(uid.arr,"%s","scott");
    pwd.len=sprintf(pwd.arr,"%s","tiger")
      

  4.   

    并且
    uid应该声明为   varchar  uid[20];
                    varchar  pwd[20];
      

  5.   

    本人在win2000+VC6.0+Oracle8.1.7编译没问题。
      

  6.   

    vc的bin里面有一个cl.exe命令
    你打开一个cmd窗口,执行
    c:\cl myproc.c orasql8.lib
    就可以了。
    其中orasql8.lib是oracle提供的库文件,在\oracle_home\precomp\lib\msvc\里。你可以把它拷到当前目录或在编译时指明路径。
      

  7.   

    同意 chenglun(忘川) 的说法。
    这样比较简单。
      

  8.   

    谢谢上面的兄弟们,chenglun的方法比较简单!
      

  9.   

    在VC下可以make和debug,没必要用命令行来做。在VC下New一个Project, Application Type选择Win32 console application,并把myproc.c加到project中。并在VC下设置一下include和lib的路径,并把Oracle的库orasql8.lib(for Oracle8.1.5)或sqllib8.lib(for Oracle8.0.5)加到Link所需Lib列表中,然后就可以make了。
    include路径中加入
    d:\orant\pro80\c\include
    lib路径中加入
    d:\orant\pro80\lib\msvc上面报的错
    error LNK2001: unresolved external symbol "void __cdecl sqlcxt(void * *,unsigned long *,struct sqlexd *,struct sqlcxp const *)" (?sqlcxt@@YAXPAPAXPAKPAUsqlexd@@PBUsqlcxp@@@Z)
    就是没有找到sqlcxt这个函数,这个函数就在sqllib8.lib或orasql8.lib中。