ฉันมี 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
.
Compilation โอเคแต่ฉันได้ segmentation ความผิดที่ 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
.
รวบรวมสำหรับ cpp lib ยบร้อยดี
แต่รวบรวมสำหรับหลัก.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));
วิธีที่จะแบ่งปันตัวแปรระหว่างภาษา C++language และ C แหล่งแฟ้ม?