우선, this (< - 링크)을 보았습니다. 작동하지 않습니다.이 동적으로로드 된 라이브러리가로드하는 프로그램의 전역 변수에 액세스 할 수없는 이유는 무엇입니까?
$ gcc -shared -rdynamic -fpic -o liba.so a.c
$ gcc -shared -fpic -o libb.so -L. -la b.c
$ gcc -fpic -o a a.c
$ ./a
0x9262
왜 0x9263
를 인쇄하지 않습니다
#include <stdio.h>
#include <dlfcn.h>
int global_var = 0x9262;
int main(void) {
void *handle = dlopen("libb.so", RTLD_LAZY);
void (*func)(void);
char *err;
if (handle == NULL) {
fprintf(stderr, "%s\n", dlerror());
return 1;
}
func = dlsym(handle, "func");
if ((err = dlerror()) != NULL) {
fprintf(stderr, "%s\n", err);
return 2;
}
global_var = 0x9263;
func();
return -dlclose(handle) * 3;
}
b.c :
#include <stdio.h>
extern int global_var;
void func(void) {
printf("0x%x\n", global_var);
}
컴파일 및 실행 나는 OS X의
A.C을 사용하고? 컴파일러 플래그의 많은 조합을 시도하고 그들 중 누구도 작동하지 않습니다.
정확히 +1 (좀 더 자) – slezica