로깅 라이브러리 liblog.so
을 만들었습니다. File *rt_file
이라는 변수를 공유하고 싶습니다.이 변수는 lib_rt.h
에 정의되어 있으며이 헤더는 log_rt.c,log_linux.c ==> liblog.so
, logd.c ==> logd
및 log_rt_client.c ==> log_rt_client
으로 상속됩니다. 여기서 나는 데몬을 만들었습니다 logd
(실제해야합니다) file pointer
rt_file
.동적 라이브러리에 공유 변수 설정
그게 내가하고 싶은 일입니다. 여기 liblog.so
은 동적 인 libarary입니다. 부팅시에 logd
이 시작되고 파일 포인터를 rt_file
및 log_rt_client
으로 설정하여 파일 포인터를 가져와 일부 로그를 인쇄해야합니다.
공통 변수 rt_file
을 공유하는 데 문제가 있습니다. 나는 다른 제안을 제안했다.
stackoverflow [1] : 첫 번째 해결책은 extern
을 사용하여 작업을 완료하는 것이 었습니다. 내 상황에 대한 비록 [2]에 대한이. 전역 변수를 작성하는 대신 변수를 범위 파일에 넣고 get
및 set
함수를 사용하여 값에 액세스하십시오.
하지만 두 가지 옵션이 모두 나를 위해 효과가 없었습니다. 설명해 드리겠습니다.
- 나는
log_rt_client
이rt_file
의 선언을했지만,이logd
에 정의되어 있기 때문에 정의되지 않은 경우 별도로 그래서, 그것은 오류를 보여주는 된 모든 파일liblog.so
logd
및log_rt_client
을 컴파일 (해야한다). 그것은log_rt_client
으로 컴파일되지 않았습니다. 모든 파일이 내가 두 번째 옵션을 시도했을 때liblog.so
- 에 연결되어 있지만, 결과는
liblog.so
세트의에logd
호출은, 예상치 못한이었고, 파일 포인터의 얻을하지만 난log_rt_client
rt_file
이 예상 포인터 (파일 포인터)를 가지고하지 않습니다 실행했을 때. 두 가지 모두에 대한rt_file
의 평균 할당은 다릅니다.
어느 것이 나에게 해결책을 제시 할 수 있습니까? 희망이 모든 것을 설명합니다.