2016-09-13 3 views
3

을 조롱 foo는 그러나약한 별명이 나는 FN을 조롱하기 위해 노력하고있어

#ifdef UT_TEST 
    void foo(void) __attribute__ ((weak, alias ("foo_impl"))); 
#else 
    void foo(void); 
#endif 

사용하는 말 대신에 컴파일 시간이 @ 런타임을 할 수있는 방법은 무엇입니까? 역사적인 이유로 C++을 사용할 수 없습니다.

+0

왜 런타임에 수행해야합니까? –

+0

'foo()'모의를 제공하는 공유 라이브러리를 미리로드 해 보았습니까? –

+0

@Ben 런타임에 대한 이유, 내가 malloc()을 조롱한다고 말할 수 있습니다. 그런 다음 malloc()을 사용하여 foo를 호출합니다. malloc()을 사용하여 bar()를 호출하려면 어떻게해야합니까? – kgunjikar

답변

1

과거에는 필자가 이전에이 시스템을 빌드 레벨에서 해결 한 것을 보았습니다. 깨끗한 솔루션이라고 생각합니다. 이 방법을 사용하면 대부분의 ifdef를 피하고 대신 전체 파일을 사용할 수 있습니다. 메이크업, 그것은 다음과 같이 보일 수 있습니다

OBJS += file1.o file2.o 
ifeq ($(UNIT_TEST),y) 
OBJS += dummy_implementation.o 
else 
OBJS += real_implementation.o 
endif 

myprog: $(OBJS) 

이상 고전적인 메이크업 관용구에서을 :

OBJS-y += file1.o file2.o 
OBJS-$(UNIT_TEST) += dummy_implementation.o 
OBJS-$(REAL_BUILD) += real_implementation.o 
OBJS = $(OBJS-y) 

myprog: $(OBJS) 

dummy_implementation.c 및 real_implementation.c이 경우 헤더 파일을 공유 할 것입니다.

관련 문제