Bonjour,
J'avais déjà utilisé avec succès l'API il y a longtemps.
Là, j'ai un PC 'tout neuf' sur lequel j'ai à nouveau besoin de l'API.

Il me semble avoir bien suvi le tutoriel de Vincent ROGIER, pourtant, dès que j'utilise la moindre fonction, notamment la première : OCI_Initialize
J'obtiens l'erreur de compilation :
error LNK2019: symbole externe non résolu _OCI_Initialize

Je sais, je ne suis pas le premier, et j'ai déjà regardé de près de nombreuses réponses à ce problème, et testé plusieurs choses, mais rien n'y fait.
Quelqu'un peut-il m'aider?

Ma config :
* Windows 7 64 bits
* Oracle 11g
* Visual Studio et VC++ 2010
* OCILIB dernière version téléchargée: ocilib-3.9.3-windows.zip

Création d'un PG en suivant le tutoriel :
* Application console Win32 (sans changer les options par défaut)
* copie de ocilib.h dans le répertoire du projet accessible par le projet
* ociliba.lib (64bits) dans le répertoire du projet accessible par le projet
* ociliba.dll (64bits) : copiée dans Windows\system32
* ajout des deux lignes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
	#include "ocilib.h"
	#pragma comment(lib,"ociliba.lib")
avant mon main, ce qui donne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
	#include "stdafx.h"
	#include "ocilib.h"
	#pragma comment(lib,"ociliba.lib")
 
	int _tmain(int argc, _TCHAR* argv[])
	{
		return 0;
	}
* Jusque là, le programme compile sans erreur ni warning.
* Important : pour le moment, je ne me suis pas préoccupé de OCI_API puisque, dans ocilib.h, il est précisé en commentaire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
 * On Windows, OCI_API MUST be set to __stdcall in order to use prebuilt libraries
 * From v3.5.0, ocilib.h automatically sets OCI_API to  __stdcall with MS compilers
* Mais si j'ajoute la fonction OCI_Initialize dans le main :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
	int _tmain(int argc, _TCHAR* argv[])
	{
		OCI_Initialize(NULL, NULL, OCI_ENV_DEFAULT);
		return 0;
	}
* J'obtiens l'erreur "error LNK2001: symbole externe non résolu _OCI_Initialize@12" etc..
* On ne peut pourtant pas faire tellement plus simple comme programme, mais je ne m'en sors pas

Ce que j'ai fait :
* que je déclare ou non ocilib.h dans les fichiers d'en-tête de l'explorateur de solutions ne change rien (normal, il est déjà déclaré en #include)
* que je déclare ou non ocilia.lib dans les dépendances supplémentaires de l'éditeur de liens ne change rien (normal, elle est déjà déclarée en #pragma)
* que j'ajoute à mon code tout ou partie des 3 define ne change rien, même si je sais que c'est inutile puisque fait dans ocilib.h :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
	#include "ocilib.h"
	#define OCI_IMPORT_RUNTIME
	#define OCI_CHARSET_ANSI
	#define OCI_API __sdtcall
	#pragma comment(lib,"ociliba.lib")
* au lieu du #define, si je définis OCI_API=__sdtcall dans dans les options du préprocesseur du projet, j'ai d'autres erreurs complètement différentes, du genre plus de reconnaissance de la syntaxe dans ocilib.h. C'est peut-être à creuser, mais comme je pense m'éloigner de mon sujet, j'abandonne cette piste.

AUTRE PISTE
* Je me dis alors que je peux essayer de compiler un des projets fournis dans zip
* J'ouvre un des projets \ocilib\proj\test\ocilib_demo_vs2010.sln
* Il s'ouvre correctement
* Je fais un essai de compilation, pour voir : le compilateur m'avertit qu'il ne trouve pas ocilib.h ni ociliba.lib. Je les rends accessibles et je réessaie de recompiler
* Surprise : j'obtiens toute une liste d'erreurs du type 'symbole externe non résolu', autant que de fonctions de l'API utilisées et dans l'ordre d'apparition:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
1>ocilib_demo.obj : error LNK2019: symbole externe non résolu _OCI_ErrorGetString@4 référencé dans la fonction _err_handler
1>ocilib_demo.obj : error LNK2019: symbole externe non résolu _OCI_ErrorGetType@4 référencé dans la fonction _err_handler
1>ocilib_demo.obj : error LNK2019: symbole externe non résolu _OCI_GetLastError@0 référencé dans la fonction _main
1>ocilib_demo.obj : error LNK2019: symbole externe non résolu _OCI_StatementCreate@4 référencé dans la fonction _main
1>ocilib_demo.obj : error LNK2019: symbole externe non résolu _OCI_ConnectionCreate@16 référencé dans la fonction _main
* A la fois je suis content d'avoir les mêmes erreurs que lorsque je crée un projet moi-même. Mais ça ne résoud pas mon problème pour autant.


J'avoue que je ne vois plus quoi faire.
Si l'un d'entre vous a une idée, je suis preneur, et ça m'enlèvera une grosse épine du pied.