|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||||||||
|
Invité de passage
![]() |
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 :
Code :
* 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 :
Code :
* 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 :
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 :
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. |
||||||||||||
|
|
00
|
|
|
#2 |
![]() ![]() vincent rogier Inscription : juillet 2007 Messages : 2 355 ![]() |
Salut,
La conventation d'appel n'est pas mais . C'est pour ca que quand tu le rajoutes, le compilateur gueule. DE plus les différents #define que tu mentionnes sont placés dans ton post apres l'include à ocilib.h, ce qui ne sert a rien puisqu'il faut les definir avant (sinon il ne sont pas vus par le header...) OCILIB definit automatiquement OCI_API à la valeur "__stdcall" seulement si _MSC_VER est définit... L'erreur initiale que tu as n'est pas une erreur de compilation mais de linkage. Le linker de VC++ ne trouve pas les symboles. Donc voici les 3 raisons possibles :
Vérifie tout ca car un des points cité doit être la cause de tes soucis
__________________
Vincent Rogier. Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique ! OCILIB (C Driver for Oracle) Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle |
|
10
|
|
|
#3 |
|
Invité de passage
![]() |
Salut Vincent,
Je ne sais pas comment tu arrives à répondre à autant de monde, aussi vite et... aussi bien surtout ! En effet, l'une de tes trois propositions est la bonne. Même si je suis sur une machine 64 bits, ce sont bien les fichier .lib et .dll en 32 bits que je dois utiliser dans mon Visual Studio 2010. Merci beaucoup, mon problème est résolu. PS: J'en ai maintenant un autre mais je vais chercher un peu ou ouvrir une nouvelle discussion. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com