GCC 2.96->3.2 이후 JNI 실행시 undefined symbol: __dso_han

mini7662의 이미지

Redhat 7.x ( 7.3 기준 gcc-2.96-110, binutils-2.11.93.0.2-11 ) 까지만해도
잘 실행하던 환경을 Redhat 8.0 ( gcc-3.2-7, binutils-2.13.90.0.2-2 ) 로 옮겼습니다.

C++로 된 API 와 연결된 Java 프로그램( JNI-Java Native Interface 를 사용하는 GUI ) 를
실행시키니 Shared Object (*.so) 로딩시 undefined symbol: __dso_handle 에러가 뜨더군요...

C++ API 는 GCC 2.96 에서 3.2 대로 옮기면서 에러가 나서
namespace 와 STL 쓰는 부분을 약간 수정했는데,
JNI 쪽도 비슷한 문제려니하고 한동안 고민(?) 좀 했습니다만 잘 모르겠더군요...ㅠ_ㅠ

그래서, 웹사이트를 뒤져보니 비슷한 문제가 gcj 의 FAQ 에 있었습니다...

-----------------------------------------------------------------------------------
http://korea.gnu.org/gcc/gcc-3.1/gcj/gcj-faq.ko.html#4_6 의 내용...

데비안 리눅스 포테이토에 포함된 GNU 링커와 같은 몇몇 버전은
`.hidden' 지시어(directive)에 대한 지원이 빠져있는데,
이 경우 최신 버전의 gcc로 빌드된 공유 라이브러리를 사용하는데 문제가 발생할 수 있습니다.
다음과 같은 3가지 해결 방법이 있습니다.

(1) .hidden을 전혀 지원하지 않는 버전으로 binutils 꾸러미를 다운그레이드 합니다.
(2) binutils 꾸러미를 최신 버전으로 업그레이드 합니다.
(3) gcc의 auto-host.h 파일에 정의된 HAVE_GAS_HIDDEN을 undef으로 처리한 뒤에
gcc를 다시 빌드합니다. (이 파일은 configure를 수행한 직후에 자동으로 생성됩니다.)
-----------------------------------------------------------------------------------

이중 (1)과 (2)는 시도하여 C++ API를 리빌드해 봤습니다만 효과가 없었고,
( Redhat 7.x 의 binutils 버젼을 써보기도 하구, Redhat 9 에서도 해보구,
최신꺼 다운받아서도 해봤습니다. 더욱 이전 버젼은 시도해 보지 않았습니다.)

(3)을 시도하자니 앞으로 실험/판매할 모든 플랫폼의 GCC를 사용자 빌드버젼으로
교체해야한다는 막막한(?) 상황에 직면했습니다. 물론 (1) 이나 (2)가 성공했다 해도 비슷하지만요...ㅡ_ㅡ;;

혹시 (3)을 쓰지않고 이 문제를 해결하는 방법을 아시는 분이 계시다면 도움을 바라겠습니다...

더불어 혹시 제가 잘못 생각하고 있는 부분이 있다면 지적해 주시기 바랍니다...(__)

mini7662의 이미지

binutils 의 ld 로 *.so 를 만들지 않고

g++ -shared 로 *.so 를 만드니 되는군요...

관련 글: http://sources.redhat.com/ml/bug-binutils/2003-q1/msg00059.html

잠시 괜한 소란을 피운듯...^^;;;

댓글 달기

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