gpt4 book ai didi

c - 无法链接预编译文件

转载 作者:太空宇宙 更新时间:2023-11-04 07:55:41 25 4
gpt4 key购买 nike

我正在使用 OpenVMS V8.4 作为 Oracle 10g 数据库服务器,内置 CXX 编译器以及 oracle 提供的 PROC 编译器。

我写了这个示例 C 程序:

示例.c

#include<stdio.h>
exec sql include sqlca; // adds Oracle PLSQL library
// same as #include<sqlca.h>

main() {
printf("Hello, World!\n");
}

然后我编译了

DEVSERVER> PROC SAMPLE.C SAMPLE.PC

该命令可以找到,然后我可以使用内置的 CXX 编译器:

DEVSERVER> CXX SAMPLE.PC

该命令没有任何错误,我现在可以使用内置的 LINK 命令:

DEVSERVER> LINK SAMPLE

现在我可以通过以下方式运行文件:

DEVSERVER> RUN SAMPLE

我得到了预期的输出:

Hello, World!

所以,这一切都很好。但是我的程序还没有做任何有用的事情。因此,让我们首先连接到数据库模式。我将 SAMPLE.C 修改为:

#include<stdio.h>
exec sql include sqlca;

main() {
printf("Hello, World!\n");

exec sql connect scott identified by tiger;
// I skipped checking for sqlca.error since LINKer wont even allow
// me to create EXE of this file
}

现在,我像以前一样预编译:

DEVSERVER> PROC SAMPLE.C SAMPLE2.PC
DEVSERVER> CXX SAMPLE2.PC
DEVSERVER> LINK SAMPLE2

这里是我得到这个错误的地方:

%ILINK-W-NUDFSYMS, 1 undefined symbol:
%ILINK-I-UDFSYM, CX3$Z6SQLCXTPPVPJP6SQLXD384K7FP
%ILINK-W-USEUNDEF, undefined symbol CX3$Z6SQLCXTPPVPJP6SQLXD384K7FP refernced
source code name: "sqlcxt(void **, unsigned int *, sqlexd *, const sqlcxp *)"
section: .text
offset: %X0000000000000350 slot: 2
module: SAMPLE2
file: DEV$SERVER[SOURCE]SAMPLE2.OBJ;1

每当我尝试在代码中的 exec sql block 中执行任何 SQL 语句时,都会发生同样的错误。

我做错了什么?

最佳答案

您遇到了问题的链式 react :编译(c++ 名称修改)和链接:

https://docs.oracle.com/cd/E11882_01/server.112/e56697/ch6.htm#VMSAR516

注意 CODE=CPP 参数。这种遗漏可能是您的第一个主要头痛问题。看起来您是 C++ 名称修改的受害者。很可能您的编译器正在翻译

 sqlcxt(void **, unsigned int *, sqlexd *, const sqlcxp *)

进入

 CX3$Z6SQLCXTPPVPJP6SQLXD384K7FP

然后注意文档中用于链接到 Oracle 库的命令过程。

关于c - 无法链接预编译文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50273639/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com