Bonjour,

Je suis sous visual studio 2005 et j'ai un petit problème avec l'Initialisation d'un membre statique d'une classe dans une librairie statique.

Comme un ptit bout de code sera plus parlant (version condensée de mon code):
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
 
//  definitions used when using static library
#if defined(DAO_STATIC)
#define DAO_DLL_DECL
//  definitions used when building DLL
#elif defined(DAO_DLL)
#define DAO_DLL_DECL __declspec(dllexport)
//  definitions used when using DLL
#else
#define DAO_DLL_DECL __declspec(dllimport)
#endif
 
class DAO_DLL_DECL OracleRepository {
  public:
    OracleRepository();
  protected:
    otl_connect * db;
  private:
    static log4cxx::LoggerPtr logger;
 
};
 
OracleRepository::OracleRepository() {
LOG4CXX_DEBUG(OracleRepository::logger, _T("+OracleRepository")); (A)
  // Bouml preserved body begin 00024983
db = NULL;
  // Bouml preserved body end 00024983
 
LOG4CXX_DEBUG(OracleRepository::logger, _T("-OracleRepository"));
}
 
log4cxx::LoggerPtr OracleRepository::logger = log4cxx::Logger::getLogger("dao::OracleRepository"); (B)
Le problème est que (A) est appelée avant que logger (B) soit initialisé.
D'où échec critique de l'application.

Ce problème ne survient que quand je compile ma librairie en statique. En dynamique tout va bien, (B) est appelé avant (A).

Pour info:
- ce lien semble répondre à mon problème mais la solution proposée ne me convient pas.
- J'utilise aussi log4cxx en statique
- Windows Xp

EDIT:
Après qques recherches il semblerait que VC++ ne fasse pas le link sur la variable statique car je ne l'utilise pas explicitement dans le programme qui utilise la librairie.

Merci pour votre aide.