J'ai gstdsexample.so
, une bibliothèque C++.
À l'intérieur, il dispose de deux variables globales que j'aimerais partager entre la bibliothèque et le programme C principal.
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
int *ptr;
Test de deux scénarios.
Scénario 1
sharedata.h
#ifndef __SHARE_DATA_H__
#define __SHARE_DATA_H__
#include <stdio.h>
#include <pthread.h>
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
int *ptr;
#endif /* __SHARE_DATA_H__ */
Inclure sharedata.h
dans gstdsexample.cpp
et main.c
.
Compilation OK mais j'obtiens une erreur de segmentation lors de l' gstdsexample.cpp
écrit les données à *ptr
.
Scénario 2
Déclarer deux variables dans
gstdsexamle.cpp
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
int *ptr;
Ensuite déclarer que extern
dans main.c.
extern pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
extern int *ptr;
Maintenant, j'ai pas défini d'erreurs de référence pour les deux variables lors de la compilation main.c
.
Scénario 3:
#ifndef __SHARE_DATA_H__
#define __SHARE_DATA_H__
#include <stdio.h>
#include <pthread.h>
extern "C" {
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
int *ptr;
}
#endif /* __SHARE_DATA_H__ */
Ensuite inclure sharedata.h
dans gstdsexample.cpp
et main.c
.
Compilation pour le rpc lib est bien.
Mais la compilation pour principal.c a des erreurs comme
error: expected identifier or ‘(’ before string constant
extern "C" {
^~~
deepstream_app_main.c: In function ‘all_bbox_generated’:
deepstream_app_main.c:98:24: error: ‘mutex’ undeclared (first use in this function); did you mean ‘GMutex’?
pthread_mutex_lock( &mutex );
^~~~~
GMutex
deepstream_app_main.c:98:24: note: each undeclared identifier is reported only once for each function it appears in
deepstream_app_main.c:101:21: error: ‘ptr’ undeclared (first use in this function); did you mean ‘puts’?
printf("%d ", *(ptr+x));
Comment partager des variables entre C++ et C source des fichiers?