2014-06-10 3 views
1

함수를 호출하는 라이브러리가 있습니다. 예 : malloc. 내 응용 프로그램에서 라이브러리를 사용합니다. 라이브러리에서 malloc을 호출하지 말고 malloc이 호출 될 때마다 "mymalloc"을 정의한 함수를 원합니다. 간단히 말해서 다른 이름을 가진 내 심볼을 사용하여 malloc 심볼을 해결하고 싶습니다.함수 이름 앨리어싱

나는이 링커 옵션 시도

: -Wl를, - defsym = malloc에 ​​= mymalloc

그리고 그것은 그러나 다만 즉 응용 프로그램에있는 통화에 대한 작동 : 프로그램의 모든 malloc가 해결 mymalloc하지만 라이브러리의 호출은 여전히 ​​stdlibc malloc을 호출합니다.

고마워, 다비드

+0

실현 가능성은 컴파일 된 라이브러리인지 헤더 전용 라이브러리인지에 따라 달라집니다. 이게 뭐야? – stefan

+1

왜'malloc' 함수를 호출 할 수 없습니까? 또는'mymalloc'에 위임 한'malloc'을 작성 하시겠습니까? 'calloc','realloc','memalign'과'free'를 대체해야 할 수도 있습니다 (https://sourceware.org/ml/libc-help/2012-04/msg00060.html에 따라) – davmac

+0

malloc 라이브러리의 구현. 일부 라이브러리는 memoery 할당에 연결하여 사용자 정의 할당자를 제공합니다. 귀하가 이것을 지원한다면 링커에서 해커없이 원하는 결과를 얻을 수 있습니다. : http://linux.die.net/man/3/malloc_hook – Will

답변

0

이 조잡하지만 프리 프로세서를 사용할 수 있습니다 - 장점은 전처리 컴파일하기 전에 실행되는 것 :

#define malloc mymalloc

당신은 #include받는 것 파일은 mymalloc의 앞에 앞에 모든 표준 라이브러리가 포함됩니다.

또한 컴파일 된 라이브러리를 직접 다시 빌드해야합니다. 실제로이 작업을 프로덕션에서 수행 할 것을 권합니다. 코드가 부서지기 쉽고 불일치가 발생할 가능성이 있습니다. mallocs 모든 구석에 숨어 있습니다.

+1

당신은 아마도 "현실에서 나는 이것을 프로덕션 환경에서 ** 반대하고 조언 할 것"이라고 말하고 싶다. – stefan