IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

Ajout de .lib


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de Kalite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 310
    Par défaut Ajout de .lib
    Bonjour

    Voici mon problème.
    J'ai un projet QT 4.4.3 sous Eclipse CDT dans lequel je souhaite ajouter une bibliothèsque statique.
    Code de la lib
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    #include <string>
     
    namespace InjectCodeLib
    {
    	/*-------------------------------------------------------------------------------------------*/
    	/*
    	 *	Permet d'injecter du code dans une application déjà existante.
    	 *	(Procedure décrite dans le chapitre 22 de "Programming Applications for Microsoft Windows", de Richter)
    	 *	@param pszCalleeModName Nom de l'API dans laquelle ont souhaite intercepter une fonction.
    	 *	@param pfnCurrent Pointeur sur la fonction d'orgine.
    	 *	@param pfnNew Pointeur sur la nouvelle fonction.
    	 *	@param hmodCaller Handle sur l'application courante.
    	 */
    	/*-------------------------------------------------------------------------------------------*/
    	extern void InjectCode(PCSTR pszCalleeModName, PROC pfnCurrent, PROC pfnNew, HMODULE hmodCaller);
     
    	/*-------------------------------------------------------------------------------------------*/
    	/*
    	 *	Permet d'injecter du code dans une application déjà existante.
    	 *	(Procedure décrite dans le chapitre 22 de "Programming Applications for Microsoft Windows", de Richter)
    	 *	@param sApiName Nom de l'API qui souhaite injecter du code.
    	 *	@param sInjectApiName Nom de l'API dans laquelle ont souhaite injecter une fonction.
    	 *	@param sFonctName Nom de la fonction que l'ont souhaite remplacer.
    	 *	@param pfnNew Adresse de la nouvelle fonction.
    	 *	@param pfnOrig Adresse de la fonction d'orgine.
    	 *	@param hmodCaller Handle sur l'application courante.
    	 */
    	/*-------------------------------------------------------------------------------------------*/
    	extern void InjectCode(const std::string sApiName, const std::string sInjectApiName, const std::string sFonctName,
    							const PROC pfnNew, PROC* pfnOrig);
    }
    (Lib compiler sous VS 2008 express)

    Donc j'ai éditer le fichier *.pro et y est ajouter:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    LIBS += -LD:\Eclipse_C-C++_WorkSpace\InjectCodeLib\Debug\InjectCodeLib.lib
    Ensuite j'ai inclu mon fichier InjectCodeLib.h dans mon fichier source.

    Lorsque je lance la compilation j'ai l'erreur de linkage suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    debug\WinCopier.exe debug/CHook.o debug/CThread.o debug/main.o debug/wincopier.o debug/moc_wincopier.o  -L"c:\Qt\4.4.3\lib" -lmingw32 -lqtmaind -LD:\Eclipse_C-C++_WorkSpace\InjectCodeLib\Debug\InjectCodeLib.lib -lQtGuid4 -lQtCored4
    debug/CHook.o: In function `ZN5CHook4HookEv':
    D:/Eclipse_C-C++_WorkSpace/WinCopier/CHook.cpp:76: undefined reference to `InjectCodeLib::InjectCode(std::string, std::string, std::string, int (*)(), int (**)())'
    debug/CHook.o: In function `ZN5CHook6UnHookEv':
    D:/Eclipse_C-C++_WorkSpace/WinCopier/CHook.cpp:88: undefined reference to `InjectCodeLib::InjectCode(std::string, std::string, std::string, int (*)(), int (**)())'
    Bon la je suis à cours d'idée.

    Merci d'avance

  2. #2
    Membre expérimenté Avatar de MacPro
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 367
    Par défaut
    Salut, t'es sûr de la manière dont tu l'ajoutes dans le .pro ?

    ta ligne suivante est douteuse :

    LIBS += -LD:\Eclipse_C-C++_WorkSpace\InjectCodeLib\Debug\InjectCodeLib.lib

    je ferais

    LIBS += -lnomDeLaLibSansExtension -LCheminDeCetteLib

    ce qui donnerait :

    LIBS+= -lInjectCodeLib -LD:\Eclipse_C-C++_WorkSpace\InjectCodeLib\Debug

  3. #3
    Membre expérimenté Avatar de MacPro
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 367
    Par défaut
    Voilà un lien expliquant le fonctionnement de qmake.
    Dans ta configuration de visual il faut aussi ajouter le répertoire contenant ta lib dans les options de projet > Linker > search path et aussi lui specifier la lib dans les options de projet > linker > input.

  4. #4
    Membre expérimenté Avatar de MacPro
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 367
    Par défaut
    Après vérification, tu n'as ptêtre pas d'erreur dans ton .pro :

    LIBS

    This variable contains a list of libraries to be linked into the project. If you are more comfortable with the Unix convension of -L/-l flags you are free to use them in a cross-platform manner and qmake will do the correct thing with these libraries on Windows (namely this means passing the full path of the library to the linker). The only limitation to this is the library must exist, for qmake to find which directory a -l lib lives in.

    For example:

    unix:LIBS += -lmath -L/usr/local/lib
    win32:LIBS += c:\mylibs\math.lib

    t'as bien les *.h de la lib dans ton projet ?

  5. #5
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Sauf erreur, eclipse utilise... gcc comme compilateur

    Pourrais tu donc me confirmer que le compilateur utilisé pour ton projet est bel et bien celui qui a été utilisé pour compiler la bibiliothèque

    Si ce n'est pas le cas, il n'est pas impossible qu'il faille en passer par la compilation de la bibliothèque avec le même compilateur que celui qui sera utilisé pour l'application.

    En effet, il ne faut pas perdre de vue le fait que la compatibilité d'une bibliothèque statique n'est réellement assurée que... pour le compilateur qui s'est chargé de sa compilation
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  6. #6
    Membre éclairé
    Avatar de Kalite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 310
    Par défaut
    Oui dans mon fichier *.cpp du projet QT dans Eclipse CDT, j'ai mit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #include "../InjectCodeLib/InjectCodeLib/InjectCodeLib.h"
    Avec Eclipse, j'ai créer un porjet "projet C++"->"Executable"->"HelloWorld". Dans les propriétés du projet dans "C/C++ Build"->"Settings"->onglet "Tool Setting"->MinGW C++ Linker->Librairies, j'ai ajouter dans la partie -L "D:\Eclipse_C-C++_WorkSpace\InjectCodeLib\Debug" et dans la partie -l "InjectCodeLib".

    Ce qui me donne la même erreur alors je suppose que c'est soit un problème d'écriture de la lib soit un problème de paramétrage du linker, enfin la je commence à sècher.

  7. #7
    Membre éclairé
    Avatar de Kalite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 310
    Par défaut
    Pour répondre à koala01:

    Effectivement Eclipse CDT utilise GCC (sous Windows j'utilise MinGW).

    Donc si je comprend bien vu que MinGw ne déclare pas DlgHelp.h et que je suis obliger d'utiliser MSVC 2008 pour ces fonctions la solution sera de créer une DLL ?

    (Je vai me coucher, j'essaye sa demain)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ajouter les libs externes quand on "build" le projet ?
    Par Sylver--- dans le forum NetBeans
    Réponses: 1
    Dernier message: 04/08/2007, 14h44
  2. ajout le lib dans @inc ?
    Par Billette dans le forum Modules
    Réponses: 6
    Dernier message: 19/03/2007, 10h16
  3. Comment ajouter un .lib à un projet VC++ 8 ?
    Par Jahjouh dans le forum Visual C++
    Réponses: 1
    Dernier message: 30/01/2007, 09h23
  4. [GD] Ajouter la lib GD dans PHP
    Par pyramix dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 20/09/2006, 13h41
  5. Code blocks ajouter un .lib
    Par gl0be dans le forum Code::Blocks
    Réponses: 7
    Dernier message: 09/09/2006, 15h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo