Recent Changes - Search:

Accueil

OpenSSL

SyncML

Apache Portable Runtime

Libxml2

Net-snmp

CUrl

Boost

Perl

ZLib

Samba

VPN

Serveurs de messagerie

edit

APR/APR-iconv

Parmi les différentes librairies de Apache Portable Runtime, l'une est particulièrement intéressante car elle concerne la convertion d'une multitude de tables de caractères.
Voici la procédure de compilation sous Windows de cette librairie.

1. Téléchargement et décompression des codes sources

apr-1.2.8-win32-src.zip
apr-iconv-1.1.1-win32-src.zip
apr-util-1.2.8-win32-src.zip

Ces trois archives doivent être décompressées dans un unique répertoire commun, chaque sous-répertoire doit ensuite être renommé :
- \apr-1.2.8 en \apr,
- \apr-iconv-1.1.1 en \apr-iconv et,
- \apr-util-1.2.8 en \apr-util.
En effet, des chemins relatifs sont indiqués dans leurs headers et les headers ne tiennent pas compte des versions.

2. Compilation des librairies

Activer votre environnement de compilation avec vcvars32.bat
depuis le répertoire \apr lancer

NMAKE /f "apr.mak" CFG="apr - Win32 Debug"
NMAKE /f "apr.mak" CFG="apr - Win32 Release"
NMAKE /f "libapr.mak" CFG="libapr - Win32 Debug"
NMAKE /f "libapr.mak" CFG="libapr - Win32 Release"

depuis le répertoire \apr-iconv lancer

NMAKE /f "apriconv.mak" CFG="apriconv - Win32 Debug"
NMAKE /f "apriconv.mak" CFG="apriconv - Win32 Release"
NMAKE /f "libapriconv.mak" CFG="libapriconv - Win32 Debug"
NMAKE /f "libapriconv.mak" CFG="libapriconv - Win32 Release"


depuis le répertoire \apr-util lancer

NMAKE /f "aprutil.mak" CFG="aprutil - Win32 Release"
NMAKE /f "aprutil.mak" CFG="aprutil - Win32 Debug"



3. Compilation des character encoding scheme

depuis le répertoire \apr-iconv\ces

nmake /f Makefile.win BUILD_MODE="debug" BIND_MODE="shared"
nmake /f Makefile.win BUILD_MODE="debug" BIND_MODE="static"
nmake /f Makefile.win BUILD_MODE="release" BIND_MODE="shared"
nmake /f Makefile.win BUILD_MODE="release" BIND_MODE="static"



4. Compilation des coded character set

depuis le répertoire \apr-iconv\ccs

nmake /f Makefile.win BUILD_MODE="release" BIND_MODE="shared"
nmake /f Makefile.win BUILD_MODE="release" BIND_MODE="static"
nmake /f Makefile.win BUILD_MODE="debug" BIND_MODE="shared"
nmake /f Makefile.win BUILD_MODE="debug" BIND_MODE="static"



5. Utilisation

En plus des fichiers .H, .LIB et .DLL habituels, lors de la compilation des CCS et CES un répertoire \iconv rempli de fichier .so a été créé.
Chaque fichier, indique les deux sens de convertion d'une table locale avec une table UCS-4. La convertion d'une chaîne de caractère locale en UTF-8 se fait donc par un passage intermédiaire en UCS-4.
Une nouvelle variable d'environnement APR_ICONV_PATH doit être définie et doit pointer vers le répertoire \iconv contenant les fichiers .so.


6. Exemple

#include "stdafx.h"

#include "apr_iconv.h"
#include "apr_pools.h"

int _tmain(int argc, _TCHAR* argv[])
{
        apr_pool_t *pool;
        apr_status_t rv;
        char szIn[]="cérémonie";       
        char szOut[50];
        apr_iconv_t handle;



        ZeroMemory(szOut,50);

        rv = apr_initialize();
        if (rv != APR_SUCCESS) {
                assert(0);
                return -1;
        }

        apr_pool_create(&pool, NULL);
        char from[]="iso-8859-1";
        char to[]="UTF-8";
        apr_size_t translated,lengthIn,lenghtOut;
        lengthIn=strlen(szIn);
        lenghtOut=49;
        rv=apr_iconv_open(to, from, pool, &handle);
        const char* pszIn = szIn;
        char* pszOut = szOut;
        apr_iconv(handle,&pszIn,&lengthIn,&pszOut,&lenghtOut,&translated);
        apr_iconv_close(handle,pool);

        apr_pool_destroy(pool);

        printf("%s", szOut);
        return 0;
}

Ce qui transformera cérémonie en cérémonie.

Si vous rencnontrez des problèmes de compilation de ce type:
test1 error LNK2019: symbole externe non résolu "__declspec(dllimport) int __stdcall apr_iconv(void *,char const * *,unsigned int *,char * *,unsigned int *,unsigned int *)" (__imp_?apr_iconvYGHPAXPAPBDPAIPAPAD22@Z) référencé dans la fonction _main
Alors, pour corriger cela, il vous faudra modifier apr_iconv.h pour ajouter devant la ligne contenant /* __BEGIN_DECLS */
#ifdef __cplusplus
extern "C" {
#endif
et
#ifdef __cplusplus
}
#endif
avant la ligne /* __END_DECLS */

Edit - History - Print - Recent Changes - Search
Page last modified on September 01, 2007, at 10:38 AM