공유하는 전역변수에서는 C++라이브러리를 C 기본 프로그램

0

질문

gstdsexample.soC++라이브러리입니다. 내부에,그것은 두 개의 세계는 변수가 공유하고 싶은 사이 라이브러리와 메인 프로그램입니다.

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.hgstdsexample.cppmain.c. 컴파일 여부 확인을 얻을 구분하기 결함을 때 gstdsexample.cpp 기록 데이터 *ptr.

시나리오 2

두 변수를 선언서

gstdsexamle.cpp

pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
int *ptr;

다음으로 선언 externmain.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.hgstdsexample.cppmain.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++과 C 소스 파일이 있는가?

c++ global-variables
2021-11-24 03:54:36
2

최고의 응답

1

헤더 파일에...gstdsexamle.h

// disable name mangling in C++
#ifdef __cplusplus
extern "C" {
#endif

// declare your two vars in the header file as extern. 
extern pthread_mutex_t mutex;
extern int *ptr;


#ifdef __cplusplus
}
#endif

에 gstdsexamle.c

#include "gstdsexamle.h"

/* only initialise here */
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
int *ptr;

에 있습니다.c

#include "gstdsexamle.h"

그게 당신이 필요합니다. mutex&ptr 에서 사용할 수 있습니다.cpp/습니다.c

2021-11-24 04:47:45

gstdsexample lib 괜찮습니다. 하지만습니다.c 가 정의되지 않은 오류로 정의되지 않은 참조하여 mutex 및 정의되지 않은 참조를 ptr'
batuman

야 할 필요가 있을 선언하는 이에습니다.c pthread_mutex_t mutex; int *ptr;
batuman
0

시나리오 1 고 시나리오 2 이 잘못되었기 때문에 C++망치는 이름의 C++식별자를 허용한 식별자 합니다.

시나리오 3 기 때문에 실패 extern "C" { } 생성자를 구문 건설 유효 만에서는 C++ 지에서 법적 C. 을 할 수 있어요 분석

extern "C" {
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
int *ptr;
}

을 나타내는 C++컴파일러는 그들은 변수를 compatibilized C 를 호출합니다.

그러나는 C 언어를 인식하지 못에서 오는 무언가 다른 언어로도록 C,그 선언로 표시되어야 합니다:

extern pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
extern int *ptr;

헤더에 파일이 하지 않고 잘못된 구문입니다.

는 접근 방식에 노출 된 anotheer 응답니다 그래서 연장되지는 않습을 설명하는 것은 거기서 말하는 것을 말 __cplusplus__ 매크로는 컴파일러에 의해 정의되면 자동으로 그것을 행동으로 C++컴파일러므로 사용할 수 있는 다른 대답을 허용하는 헤더 파일을 공유하는 C 및 C++선언이 있습니다.

2021-11-25 07:26:38

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................