user2005494
user2005494

Reputation: 189

error LNK2001: unresolved reference with Pro*C code with Visual C++

I'm getting an error when trying to build a DLL file with a C file preprocessed with Pro*C, the command I'm using to build my dll is:

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

The error is:

error LNK2019: unresolved external symbol _sqlcxt

How can I fix this?

Upvotes: 0

Views: 2431

Answers (3)

JFR
JFR

Reputation: 51

I got the same message trying to link an oracle database application using the same visual C++ 2005 project as before but with oracle12c instead of oracle 11.

It seems that the orasql12.lib was generated with a code that add an underscore as prefix but visual studio needs an import library without leading underscore.

So I fix this problem by regenerating the orasql12.lib. For this, you must use the DUMPBIN and LIB commands in a visual studio tool command line console. Open the VC++ command line console in the directory where the oraclesql12.dll was installed and type: DUMPBIN /EXPORTS orasql12.dll > orasql12.def

this will generate a def file that you have to edit in order to remove all except the name column symbols and add two header lines, the firts lines of your orasql12.def file will look like this:

LIBRARY orasql12
     EXPORTS
 DSNTIAR
 ORASQL8
...

then use LIB command in VC++ tools console and type:

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

(LIBPATH is set to the orasql12.dll installation directory, change X86 if needed) A new orasql12.lib has been generated without leading underscores.

Upvotes: 1

Roger
Roger

Reputation: 1

error LNK2019: unresolved external symbol _sqlcxt on **Visual Studio VC++ Error Solved**

If you are using Oracle Client you might have this Error because of the corrupted Libraries (may be) . such as orasqx12.lib and orasqx12.lib . There might be some bugs with these libraries. if you have downloaded Oracle Client 12.2.0.1 or may be with Earlier Versions you will be fine. However if you are downloading 64bit version of Oracle database or Oracle Client

  1. you must change your Visual Studio Platform to **64bits instead of 32bits at the Configuration Manager of the Project Solution.**

    1. If you are a beginner and trying to learn how to use Pro* C with your Visual Studio , You might want to Download the Oracle Database 11g release 2 Express Version. because that library file (orasql11.lib) works fine without giving you this Error **_sqlcxt .**

I would say this Error is caused by the library, Its looking for function defined in that library and it is could not find it , may be because its corrupted. I am not sure. since there are a lot of people have this problem and I decided to post this. Also this is only for the beginners who are trying to learn Pro* C with Visual Studio. Not for the Experts. also You may not get this Error with the Standard Edison of Oracle database. .

Upvotes: 0

Michael Burr
Michael Burr

Reputation: 340436

The /IMPLIB option is to specify a name for an import library that's being created - instead you want to have the linker use the ProC libraries as input:

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

Upvotes: 0

Related Questions