2010-02-25 28 views
4

Je tente de créer une mémoire tampon circulaire dans la mémoire partagée à l'aide des bibliothèques Boost circular_buffer et Interprocess. J'ai compilé et exécuté l'exemple donné dans le Interprocess documentation pour créer un vecteur dans la mémoire partagée sans problème. Cependant, quand je le modifier pour utiliser le Boost circular_buffer comme:Problème lors de la création d'une mémoire tampon circulaire dans la mémoire partagée à l'aide de Boost

int main(int argc, char *argv[]) 
{ 
    managed_shared_memory segment(create_only, "MySharedMemory", 65536); 
    const ShmemAllocator alloc_inst (segment.get_segment_manager()); 
    MyCircBuffer *myCircBuf = segment.construct<MyCircBuffer>("MyCircBuffer")(alloc_inst); 
    return 0; 
} 

Je reçois une erreur de compilation (provoquée par segment.construct()). Une idée de ce que je fais mal? Est-ce parce que circular_buffer n'est pas l'un des conteneurs répertoriés dans /boost/interprocess/containers, c'est-à-dire qu'il n'est pas compatible avec Interprocess?

Merci,

C

+2

pouvez-vous fournir le message d'erreur de compilation? –

+1

Veuillez publier la liste des erreurs et le compilateur ... – rlbond

+0

Désolé de ne pas donner tous les détails. L'erreur que j'obtiens est /usr/local/include/boost/circular_buffer/base.hpp:2127: erreur: impossible de convertir 'boost :: interprocess :: offset_ptr ' en 'void *' pour l'argument '1' à 'void * memset (void *, int, size_t) ' J'utilise gcc v4.2.1 sur MAc OS X – recipriversexclusion

Répondre

3

j'ai posé la même question sur le forum des utilisateurs de boost et la solution qui a été suggérée était d'utiliser des indicateurs de -DBOOST_CB_DISABLE_DEBUG ou -DNDEBUG, depuis circular_buffer repose sur des pointeurs premières pour le soutien de débogage .

D'autres suggestions?