libmongoclient.a boost 라이브러리 컴파일 에러..

park3250의 이미지

안녕하세요
mongodb c++ dirver 설치 후 라이브러리 링크 후 프로세스 컴파일 시 에러 발생합니다.

g++ -o mongotest ux_main.o MongoConn.o FingerprintDB.o FingerprintDB_MongoImpl.o OIndexDB_MongoImpl.o TIndexDB_MongoImpl.o -pthread /usr/local/mongodb/lib/libmongoclient.a /usr/local/lib/libboost_system.a /usr/local/lib/libboost_filesystem.a -L/usr/local/lib -lboost_thread-mt /usr/local/lib/libboost_program_options.a
/usr/local/mongodb/lib/libmongoclient.a(log.o): In function `exists':
/root/mongodb-src-r2.4.9/src/third_party/boost/boost/filesystem/v3/operations.hpp:289: undefined reference to `boost::filesystem3::detail::status(boost::filesystem3::path const&, boost::system::error_code*)'
/usr/local/mongodb/lib/libmongoclient.a(log.o): In function `is_directory':
/root/mongodb-src-r2.4.9/src/third_party/boost/boost/filesystem/v3/operations.hpp:294: undefined reference to `boost::filesystem3::detail::status(boost::filesystem3::path const&, boost::system::error_code*)'
/usr/local/mongodb/lib/libmongoclient.a(log.o): In function `is_regular':
/root/mongodb-src-r2.4.9/src/third_party/boost/boost/filesystem/v3/operations.hpp:315: undefined reference to `boost::filesystem3::detail::status(boost::filesystem3::path const&, boost::system::error_code*)'
collect2: ld returned 1 exit status
make: *** [mongotest] 오류 1

libboost_system.a, libmongoclient.a 등등 링크를 해줬는데 에러가 왜 발생하는걸까요?

mongodb c++ dirver 설치시 부스터를 링크해서 컴파일 해아 하나요?

설치는 http://alloe.tistory.com/m/post/58 이사이트 참고하여 설치하였습니다

답변 부탁드립니다..

twinwings의 이미지

우선 참조하는 라이브러리에 해당 심볼이 있는지 확인 부터 해야 할 것 같습니다.

현재 없는 심볼이(undefined reference)
- boost::filesystem3::detail::status

그리고 참조하고 있는 라이브러리가
- /usr/local/lib
- boost_thread-mt
- /usr/local/lib/libboost_program_options.a
- /usr/local/mongodb/lib/libmongoclient.a

등인 것 같은데

nm (프로젝트에 포함된 라이브러리) | c++filt | grep "boost::filesystem3::detail::status"

부터 해보세요.

만약 없으면, 해당 API가 deprecated 됐던가 버전이 안맞아서 없던가(1)
또는 잘못된 라이브러리를 참조 혹은 해당 심볼이 있는 라이브러리를
빼먹고 있는 겁니다.(2)

twinwings의 이미지

http://redmine.webtoolkit.eu/boards/2/topics/4208?r=4285

http://stackoverflow.com/questions/15634114/cant-link-program-using-boost-filesystem

첫번째는 완전히 동일한 문제고 두번째도 비슷한 경우인것 같네요. 한번 읽어 보면 좋을 것 같습니다.

park3250의 이미지

# nm libmongoclient.a | c++filt | grep "boost::filesystem3::detail::status"
U boost::filesystem3::detail::status(boost::filesystem3::path const&, boost::system::error_code*)
U boost::filesystem3::detail::status(boost::filesystem3::path const&, boost::system::error_code*)
U boost::filesystem3::detail::status(boost::filesystem3::path const&, boost::system::error_code*)
U boost::filesystem3::detail::status(boost::filesystem3::path const&, boost::system::error_code*)
U boost::filesystem3::detail::status(boost::filesystem3::path const&, boost::system::error_code*)

수행결과로 이렇게 출력되었는데
그러면 제가 libmongoclient.a mongodb c++ driver 라이브러리 생성시
위 함수를 포함한 라이브러리를 포함시키지 못하고 컴파일 한건가요?

twinwings의 이미지

좀 오래 되었네요. 네 맞습니다. 포함시키지 않으셨습니다. 각 줄에

U 라고 되어있는건 Undefined 즉, 해당 라이브러리에서 호출하고 있는 것입니다.

따라서 boost::filesystem3가 정의되어 있는 다른 라이브러리를 참조하여 링크해야 할 겁니다.

똑같이 nm 했을 때

T boost::filesystem3::detail::status(boost::filesystem3::path const&, boost::system::error_code*)

와 같이 T(Text, 정의되어있음)가 있어야 합니다.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.