Compiler un nouveau module pour Apache

Questions sur le développement d'Apache et de ses modules.

Modérateur : Modérateurs

Avatar de l’utilisateur
TBoris
Nouveau membre
Messages : 4
Inscription : ven. 19 août 2005, 9:57

Messagepar TBoris » ven. 19 août 2005, 10:01

Bonjour,

Je début avec Apache et je dois créer un module pour Apache !
Seul problème je ne sais pas comment le compiler sous Windows !
Comment faire ?

J'ai bien les sources de mon module + un fichier source faisant le lien entre mon module et Apache mais comment compiler le tout ?

Evolution
Conseiller
Conseiller
Messages : 3032
Inscription : lun. 05 janv. 2004, 18:56
Localisation : Lyon

Messagepar Evolution » ven. 19 août 2005, 10:27

Salut,

sous Windows, en général "on" utilise Visual C++

Avatar de l’utilisateur
TBoris
Nouveau membre
Messages : 4
Inscription : ven. 19 août 2005, 9:57

Messagepar TBoris » ven. 19 août 2005, 14:25

Mais encore ?? ;)
Quelles librairies faut il ajouter au projet sous Visual ?

En fait j'explique plus clairement :
J'utilise le logiciel GSOAP (qui permet de créer des services web utilisants SOAP)
et y a 2 modes de fonctionnement pour GSOAP :
- soit en standalone (ca c bon ca marche tres bien)
- soit en tant que module Apache

Donc pour creer le module Apache j'ai besoin du code de mon serveur SOAP ( ca c OK) d'une librairie spécifique a GSOAP qui va faire le lien avec APACHE ensuite fuat compiler le tout mais la vient le probleme je sais pas vers quelle librairie de Apache faut que je fasse des liens !

Avatar de l’utilisateur
Gandalf
Sorcier des forums
Sorcier des forums
Messages : 2528
Inscription : jeu. 04 déc. 2003, 22:58

Messagepar Gandalf » ven. 19 août 2005, 16:48

à priori (pour apache 2) :

libapr.lib
libapriconv.lib
libaprutil.lib
libhttpd.lib

qui se trouvent dans le répertoire lib de la distribution binaire d'apache 2 sous windows.
Celui qui détruit quelque chose pour savoir ce que c'est, a quitté le chemin de la sagesse.

Avatar de l’utilisateur
TBoris
Nouveau membre
Messages : 4
Inscription : ven. 19 août 2005, 9:57

Messagepar TBoris » lun. 22 août 2005, 9:50

Merci de ces détails !
Et pour apache 1.3 ?

Avatar de l’utilisateur
Gandalf
Sorcier des forums
Sorcier des forums
Messages : 2528
Inscription : jeu. 04 déc. 2003, 22:58

Messagepar Gandalf » lun. 22 août 2005, 10:51

je te conseille de telecharger la version 1.3.33 sous windows et de regarder les entetes et les librairies fournies avec...
Celui qui détruit quelque chose pour savoir ce que c'est, a quitté le chemin de la sagesse.

Avatar de l’utilisateur
TBoris
Nouveau membre
Messages : 4
Inscription : ven. 19 août 2005, 9:57

Messagepar TBoris » lun. 22 août 2005, 15:30

Merci pour ton aide !
C'est ce que je viens de faire et y a l'air d'avoir des petites subtilités lors de la compilation du module !!
Enfin ca approche !!
Pas évident de trouver tout seul car c'est pas très bien documenté du coté de GSOAP en tout cas pour développer un module Apache !

Avatar de l’utilisateur
zibo3
Membre
Membre
Messages : 14
Inscription : lun. 18 juil. 2005, 16:19

Messagepar zibo3 » ven. 02 sept. 2005, 11:00

Bonjour,

je viens de lire le forum et j'ai le même problème qeu toi, j'ai mon fichier source pour mon module, un très simple, je débute et j'inclus bien les librairies comme il faut, la compilation fonctionne.

jusque là tout va bien sauf que après avoir configurer apache avec httpd.conf pour qu'il load mon module et bien Apache ne veut plus se lancer.

J'ai mis la ligne suivante dans httpd.conf :

LoadModule tut1_module "D:\dev\IWDLL\iwapache\Debug\iwapache.dll"

Ci-joint mon fichier source de mon module qui ecrit un message dans le fichier log de apache à chaque ouverture de page.

/*
* Include the core server components.
*/
#include "httpd.h"
#include "http_config.h"

/*
* This function is registered as a handler for HTTP methods and will
* therefore be invoked for all GET requests (and others). Regardless
* of the request type, this function simply sends a message to
* STDERR (which httpd redirects to logs/error_log). A real module
* would do *alot* more at this point.
*/
static int mod_tut1_method_handler (request_rec *r)
{
// Send a message to stderr (apache redirects this to the error log)
fprintf(stderr,"apache2_mod_tut1: A request was made.\n");

// We need to flush the stream for messages to appear right away.
// Performing an fflush() in a production system is not good for
// performance - don't do this for real.
fflush(stderr);

// Return DECLINED so that the Apache core will keep looking for
// other modules to handle this request. This effectively makes
// this module completely transparent.
return DECLINED;
}

/*
* This function is a callback and it declares what
* other functions should be called for request
* processing and configuration requests. This
* callback function declares the Handlers for
* other events.
*/
static void mod_tut1_register_hooks (apr_pool_t *p)
{
// I think this is the call to make to register a
// handler for method calls (GET PUT et. al.).
// We will ask to be last so that the comment
// has a higher tendency to go at the end.
ap_hook_handler(mod_tut1_method_handler, NULL, NULL, APR_HOOK_LAST);
}

/*
* Declare and populate the module's data structure. The
* name of this structure ('tut1_module') is important - it
* must match the name of the module. This structure is the
* only "glue" between the httpd core and the module.
*/
module AP_MODULE_DECLARE_DATA tut1_module =
{
// Only one callback function is provided. Real
// modules will need to declare callback functions for
// server/directory configuration, configuration merging
// and other tasks.
STANDARD20_MODULE_STUFF,
NULL,
NULL,
NULL,
NULL,
NULL,
mod_tut1_register_hooks, /* callback for registering hooks */
};

Avatar de l’utilisateur
Gandalf
Sorcier des forums
Sorcier des forums
Messages : 2528
Inscription : jeu. 04 déc. 2003, 22:58

Messagepar Gandalf » ven. 02 sept. 2005, 15:01

certes, mais quelle raison donne apache pour cela ?
Celui qui détruit quelque chose pour savoir ce que c'est, a quitté le chemin de la sagesse.

Avatar de l’utilisateur
zibo3
Membre
Membre
Messages : 14
Inscription : lun. 18 juil. 2005, 16:19

Messagepar zibo3 » ven. 02 sept. 2005, 15:44

Résolu:

J'avais oublier de mettre en externe dans un fichier .def le nom de mon module enfin je sais pas si c'est la bonne solution mais ca fonctionne.

Pour info, Apache trouvait bien ma DLL arrivait à la lancer mes ne trouvait pas de référence à ma structure AP_MODULE_DECLARE_DATA.

Si quelqu'un a une meilleur solution parce que apparement les autres modules ne fonctionne pas comme ca. Même si ma technique fonctionne, je veux bien la vrai originale.

merci

Avatar de l’utilisateur
Gandalf
Sorcier des forums
Sorcier des forums
Messages : 2528
Inscription : jeu. 04 déc. 2003, 22:58

Messagepar Gandalf » ven. 02 sept. 2005, 16:19

à priori, pour windows, il serait bien de mettre un _declspec(dllexport) devant la declaration de ta variable,

mais le coup du .def est une solution satisfaisante car ne necessite pas de modifier le code source si tu passes sous linux par exemple.
Celui qui détruit quelque chose pour savoir ce que c'est, a quitté le chemin de la sagesse.


Revenir vers « Développement Apache »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité