[SOLVED] Static Library 링크 질문
해결했습니다.
어이가 없습니다.. 시도했던 방법을 다시 따라서 해봤는데,.. 되네요;;
분명히 에러나는 것을 확인하고 다시 했는데.. 됩니다.
header file extern "C" 로 해결했습니다.
저와같은 초짜분들 도움되시길..
-------------------------------------------------------------------------------------------------
안녕하세요. 선배님들.
Makefile 에서 컴파일 이후, 빌드하는 도중에 Undefined Reference Error 가 발생합니다.
이전에 도움주신 방법대로 해봤는데, 먹히지 않네요.
1. 추가하고자 하는 Static Library 를 nm 으로 확인
0000055c T gpiomgr_led_off
000004f0 T gpiomgr_led_on
: 여기까지는 T(해당 Object file 내 정의되어 있음.) 및 함수명으로 정확히 라이브러리가 있는 것 확인.
2. 소스 내, header file 추가
: 마찬가지로 여기도 헤더를 추가함으로서, compile 에러가 발생하지 않는 것 같습니다.
3. Makefile 빌드 시, 에러
App.o: In function `funcA(int a, int b)':
App.cc:(.text._Z20funcAN9~~~~): undefined reference to `gpiomgr_led_off()'
App.cc:(.text._Z20funcAN9~~~~): undefined reference to `gpiomgr_led_on()'
시도한 방법
1. 라이브러리 내 추가한 Flag 도 추가해보기.(실제로 이것으로 해결한 적이 있습니다.) - 실패
2. cpp코드에서 c 라이브러리 추가이기 때문에 extern "C" 사용해보기 - 성공
3. 추가하려는 Static Library 의 위치만 변경해보기 - 실패
아무래도 해당 라이브러리를 아예 인식하지 못하는 것 같습니다. 제가 이렇게 생각하는 이유는
해당 Static Library 자체를 아예 Makefile 내에서 제거해도 같은 에러가 발생하기 때문입니다.
libTest3 을 추가할 때, 발생하는 에러이기에 $(SHARED_LIBS) 뒤에도 넣어보고, Static Library 내 위치도
변경해보고, -c -o 앞에도 넣어보고 했지만, 소용이 없네요.
아래는 코드입니다.
STATIC_LIBS = \
$(LIB_PATH)libTest/libTest.a\
$(LIB_PATH)libTest2/libTest2.a\
$(LIB_PATH)libTest3/libTest3.a
.cc.o:
@echo 'Start to compile.'
$(CC) $(LOCAL_CFLAGS) $(INCLUDES) -c -o $@ $< $(STATIC_LIBS) $(SHARED_LIBS)
$(TARGET): $(SRC_OBJS)
@echo 'Start to build.'
$(CC) $(LOCAL_CFLAGS) $(INCLUDES) -o $@ $(SRC_OBJS) $(STATIC_LIBS) $(SHARED_LIBS)
어떤 부분이 원인인지, 제가 어떤걸 놓치고 있는지, 혼자서 해결하기 쉽지 않네요..
긴 글 읽어주셔서 정말 감사합니다.
하 저도 이것때문에 애먹은적 있었는데..
하 저도 이것때문에 애먹은적 있었는데..
C하고 CPP하고 함수호환이 안될줄 누가 알았겠습니까 ㅋㅋ
T.T
보드마다 Makefile 로 컴파일하는게 생각보다 재미있으면서 시작할 때 엄청 두렵더라구요.. 맨날 달라..ㅠㅠ
댓글 달기