공유 라이브러리의 loadup에서 일부 코드를 호출하는 코드를 작성하고 싶습니다. 난 내가 이런 식으로 그것을 할 것이라고 생각 :리눅스에서 gcc 컴파일러를 사용하는 #pragma init 및 #pragma fini
#pragma init(my_init)
static void my_init() {
//do-something
}
int add (int a,int b) {
return a+b;
}
을 그래서 내가
과 그 코드를 빌드 할 때의 gcc -fPIC -g -c -Wall tt.c
그것은
을 반환gcc -fPIC -g -c -Wall tt.c
tt.c:2: warning: ignoring #pragma init
tt.c:4: warning: ‘my_init’ defined but not used
그래서 #pragma를 무시합니다. 실제 코드에서이 코드를 시도했는데 코드가 무시 되었기 때문에 pragma 섹션에서 함수가 호출되지 않았기 때문에 코드가 중단되었습니다.
어떻게 이러한 #pragma init 및 fini 문을 gcc에 사용하게 할 수 있습니까?
을 내가 찾던 정확히! – Josh
Hm, gcc 4.4.6 위의 예에서 '{'token '오류 이전에'expected ','or ';'를 얻습니다. 함수 정의에서 속성을 제거하고 그 앞에 생성자 속성이있는 함수 선언을 넣으면 예상대로 작동합니다/[documented] (http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html). – maxschlepzig
@maxschlepzig : 속성은 갱신 된 함수 정의에서 선언 자 앞에 있어야합니다. – caf