[SOLVED] Static Library 링크 질문

owcred601의 이미지

해결했습니다.

어이가 없습니다.. 시도했던 방법을 다시 따라서 해봤는데,.. 되네요;;
분명히 에러나는 것을 확인하고 다시 했는데.. 됩니다.
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)

어떤 부분이 원인인지, 제가 어떤걸 놓치고 있는지, 혼자서 해결하기 쉽지 않네요..

긴 글 읽어주셔서 정말 감사합니다.

jehnpark의 이미지

하 저도 이것때문에 애먹은적 있었는데..
C하고 CPP하고 함수호환이 안될줄 누가 알았겠습니까 ㅋㅋ

owcred601의 이미지

보드마다 Makefile 로 컴파일하는게 생각보다 재미있으면서 시작할 때 엄청 두렵더라구요.. 맨날 달라..ㅠㅠ

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.