错误LNK2001:使用Visual C ++的Pro * C代码未解析的引用

时间:2013-01-30 23:31:53

标签: c windows visual-studio oracle

我在尝试使用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

我该如何解决这个问题?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

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

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

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

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,但没有下划线。

答案 2 :(得分:0)

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

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

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

    1. 如果您是初学者并且正在尝试学习如何在Visual Studio中使用 Pro * C ,则可能需要下载Oracle Database 11g release 2 Express版本。因为该库文件(orasql11.lib)工作正常而没有给你这个错误** _ sqlcxt 。**
  2. 我会说这个错误是由库引起的,它寻找在该库中定义的函数并且找不到它,可能是因为它已损坏。我不确定。既然有很多人都有这个问题,我决定发布这个。此外,这仅适用于尝试使用Visual Studio学习Pro * C的初学者。不是专家。您也许不会在Oracle数据库的标准Edison中出现此错误。 。