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):
Le problème est que (A) est appelée avant que logger (B) soit initialisé.
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)
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.
Partager