2010-03-18 4 views
1

공유 라이브러리를 사용하는 여러 프로그램이 있습니다. 이러한 공유 라이브러리는 다양한 표준 C 라이브러리를 사용합니다. ie라이브러리에서 std 라이브러리 수학 함수에 대한 참조를 찾을 수 없습니다.

프로그램 A와 프로그램 B는 모두 공유 라이브러리 S를 사용합니다. 공유 라이브러리 S는 표준 C 수학을 사용합니다. 정적으로 공유 라이브러리 S를 표준 라이브러리와 링크 할 수있게하려면 다음과 같이 정적으로 프로그램 A와 B를 S에 연결하여 라이브러리 파일을 끌고 갈 필요가 없습니다. 왜냐하면이 프로그램들이 실행되고 있기 때문입니다. BusyBox 0.61을 실행하는 임베디드 시스템.

../lib/libgainscalecalc.a(gainscalecalc.): In function 'float2gs': 
[path to my C file].c:73: undefined reference to 'log' 

누군가가 나 좀 도와 주실 래요 : 나는 정적 공유 라이브러리 S에 대해 프로그램을 링크 할 때 그러나, 나는 GCC에서 오류 메시지가 나타거야? 내가 사용 만들기 명령은 다음과 같습니다 :

CFLAGS += -Wall -g -W 
INCFLAGS = -I$(CROSS_INCLUDE)/usr/include 
LIBFLAGS += -L$(CROSS_LIB)/usr/lib -lm 

gainscalecalc_static.o: gainscalecalc.c 
$(CC) $(CFLAGS) -c $< -I. $(INCFLAGS) -o [email protected] 

gainscalecalc_dynamic.o: gainscalecalc.c 
$(CC) $(CFLAGS) -fPIC -c $< -o [email protected] 

all: staticlib dynamiclib static_driver dynamic_driver 

clean: 
$(RM) *.o *.a *.so *~ driver core $(OBJDIR) 

static_driver: driver.c staticlib 
$(CC) $(CFLAGS) -static driver.c $(INCFLAGS) $(LIBFLAGS) -I. -L. -lgainscalecalc -o [email protected] 

dynamic_driver: driver.c dynamiclib 
$(CC) $(CFLAGS) driver.c -o [email protected] -L. -lgainscalecalc 

staticlib: gainscalecalc_static.o 
$(AR) $(ARFLAGS) libgainscalecalc.a gainscalecalc_static.o 
$(RANLIB) libgainscalecalc.a 
chmod 777 libgainscalecalc.a 

dynamiclib: gainscalecalc_dynamic.o 
$(CC) -shared -o libgainscalecalc.so gainscalecalc_dynamic.o 
chmod 777 libgainscalecalc.so 

편집 :이 공유 라이브러리에 연결 컴파일 잘, 나는 아직

답변

2

이 lgainscalecalc 후 $ (LIBFLAGS)을 넣어 그들을 테스트하지 않았습니다 . 링커 명령 줄은 위치에 따라 다릅니다. 라이브러리 뒤에 -lm을두면 링커가 라이브러리에서 사용하는 참조를 해결하기 위해 libm.a를 사용하게됩니다.