मैं gstdsexample.so
, एक C++ पुस्तकालय है ।
अंदर, यह दो वैश्विक चर है कि मैं साझा करना चाहते हैं, पुस्तकालय के बीच और मुख्य C के लिए कार्यक्रम.
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
int *ptr;
परीक्षण के दो परिदृश्यों.
परिदृश्य 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__ */
शामिल हैं sharedata.h
में gstdsexample.cpp
और main.c
.
संकलन ठीक है, लेकिन मैं एक विभाजन दोष मिलता है जब gstdsexample.cpp
करने के लिए डेटा लिखते *ptr
.
परिदृश्य 2
घोषित दो चर में
gstdsexamle.cpp
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
int *ptr;
तो के रूप में घोषित extern
में main.c.
extern pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
extern int *ptr;
अब मैं अपरिभाषित संदर्भ त्रुटियों के लिए दो चर जब संकलन main.c
.
परिदृश्य 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__ */
फिर में शामिल हैं sharedata.h
में gstdsexample.cpp
और main.c
.
के संकलन के लिए सीपीपी उदारीकरण ठीक है ।
लेकिन संकलन के लिए मुख्य.c गया है, त्रुटियों के रूप में
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));
कैसे साझा करने के लिए चर के बीच सी++ और सी स्रोत फ़ाइलें?