0

尝试使用 Pro*C 预处理的 C 文件构建 DLL 文件时出现错误,我用来构建我的 dll 的命令是:

link /NOLOGO /DLL /SUBSYSTEM:WINDOWS /NODEFAULTLIB:libc.lib /IMPLIB:orasql11.lib /IMPLIB:orasqx11.lib /OUT:qvc.dll\
    /IMPLIB:oraxa11.lib /IMPLIB:oci.lib \
    /LIBPATH:"$(ORACLE_HOME)\precomp\lib\msvc" /LIBPATH:"$(ORACLE_HOME)\precomp\lib" @files.lnk

错误是:

error LNK2019: unresolved external symbol _sqlcxt

我怎样才能解决这个问题?

4

3 回答 3

1

选项是为正在创建的/IMPLIB导入库指定名称 - 而您希望链接器使用 ProC 库作为输入:

link /NOLOGO /DLL /SUBSYSTEM:WINDOWS /NODEFAULTLIB:libc.lib orasql11.lib orasqx11.lib /OUT:qvc.dll\
    oraxa11.lib oci.lib \
    /LIBPATH:"$(ORACLE_HOME)\precomp\lib\msvc" /LIBPATH:"$(ORACLE_HOME)\precomp\lib" @files.lnk
于 2013-01-30T23:46:14.910 回答
1

我在尝试使用与以前相同的 Visual C++ 2005 项目但使用 oracle12c 而不是 oracle 11 链接 oracle 数据库应用程序时收到相同的消息。

似乎 orasql12.lib 是使用添加下划线作为前缀的代码生成的,但 Visual Studio 需要一个没有前导下划线的导入库。

所以我通过重新生成 orasql12.lib 来解决这个问题。为此,您必须在 Visual Studio 工具命令行控制台中使用 DUMPBIN 和 LIB 命令。在安装 oraclesql12.dll 的目录中打开 VC++ 命令行控制台,然后键入: DUMPBIN /EXPORTS orasql12.dll > orasql12.def

这将生成一个 def 文件,您必须对其进行编辑才能删除除名称列符号之外的所有内容并添加两个标题行,您的 orasql12.def 文件的第一行将如下所示:

LIBRARY orasql12
     EXPORTS
 DSNTIAR
 ORASQL8
...

然后在 VC++ 工具控制台中使用 LIB 命令并键入:

LIB /DEF:orasql12.def /MACHINE:X86 /LIBPATH:D:\users\Appl\oracle\client_12c\bin

(LIBPATH 设置为 orasql12.dll 安装目录,如果需要更改 X86) 新的 orasql12.lib 已生成,没有前导下划线。

于 2020-03-03T15:22:04.823 回答
0

错误 LNK2019:未解析的外部符号 _sqlcxt 上 **Visual Studio VC++ 错误已解决**

如果您使用的是 Oracle 客户端,您可能会因为库损坏(可能是)而出现此错误。例如orasqx12.lib 和 orasqx12.lib。这些库可能存在一些错误。如果您已经下载了 Oracle Client 12.2.0.1 或者可能使用的是早期版本,那么您会没事的。但是,如果您正在下载 64 位版本的 Oracle 数据库或 Oracle 客户端

  1. 您必须在项目解决方案的配置管理器中将您的 Visual Studio 平台更改为 **64 位而不是 32 位。**

    1. 如果您是初学者并正在尝试学习如何将Pro* C 与您的 Visual Studio 结合使用,您可能需要下载Oracle 数据库 11g 第 2版快捷版。因为该库文件(orasql11.lib)可以正常工作而不会给您此错误**_sqlcxt。**

我会说这个错误是由库引起的,它正在寻找该库中定义的函数并且找不到它,可能是因为它已损坏。我不知道。因为有很多人有这个问题,所以我决定发布这个。此外,这仅适用于尝试使用 Visual Studio 学习 Pro* C 的初学者。不适合专家。您也可能不会在使用 Oracle 数据库的标准 Edison 时遇到此错误。.

于 2017-11-24T00:39:01.587 回答