我写了一段简单的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);
}
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);
}
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
我用的是Oracle For OpenVMS + Compaq C
请问我该如何做,要包含哪个库文件?
strcpy (pwd,"tiger");
应写成
uid.len=sprintf(uid.arr,"%s","scott");
pwd.len=sprintf(pwd.arr,"%s","tiger")
uid应该声明为 varchar uid[20];
varchar pwd[20];
你打开一个cmd窗口,执行
c:\cl myproc.c orasql8.lib
就可以了。
其中orasql8.lib是oracle提供的库文件,在\oracle_home\precomp\lib\msvc\里。你可以把它拷到当前目录或在编译时指明路径。
这样比较简单。
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中。