[해결] UNIX(AIX)에서 컴파일 할 경우 Shared Libary 참조 하려면 어떤방식으로 해야 되나요?

조야의 이미지

지금 Shared Libary 를 컴파일을 하긴 했는데...

이걸 Test를 해봐야 되는데..

Test 프로그램에 Shared Libary 를 참조 해서 컴파일 하려고 했는데 에러가 떠서 제가 멀 잘못했는지..

ld: 0706-006 라이브러리 파일 -l libinfoenc을(를) 찾거나 열 수 없습니다.
ld:open(): 경로 이름에 있는 파일이나 디렉토리가 존재하지 않습니다.

라이브러리 파일명은 libinfoenc.so 이고..

xlc -o test main.o -L/test -llibinfoenc

컴파일 명령어는 이렇게 줬습니다.

근데 이렇게 만든 so 파일을 사용 하려면 무엇을 해야 하는지..

긴급하게 부탁 드리겠습니다.

조야의 이미지

를 등록 해도 마찬가지인데 방법 없을까요~?

bushi의 이미지

xlc -o test main.o -L/test -linfoenc
가 아닐까 싶은데요.

LD_LIBRARY_PATH 는 링커가 아니라 로더가 참조합니다.
로더가 이것을 지원한다면 말이죠.

OTL

harisoo의 이미지

1. /test가 존재하지 않는다.
=>/test가 아니라 ./test일 가능성이 없는지.
2. 컴파일러 버그다.
=> xlc -L/test -o test main.o -llibinfoenc

1,2번 다 해당될 수도 있겟군요

SoulreaveR의 이미지

library를 명시할때 어떤 경우에는 library이름 자체만을 명시하는 경우가 있습니다.

예) libpthread.so를 링크해야 할 경우
gcc ........ -lpthread

kihlle의 이미지

으셔서 정확히 답해드리기 힘들군요.
(AIX4.3과 5L은 다릅니다.)

일단 라이브러리를 찾지못한다면 다음 두 경우일것 같습니다.

1. 라이브러리 이름을 .a로 바꾼다.
libinfoenc.so가 아니라 libinfoenc.a입니다. (shared라도 정적라이브러리처럼 .a 접미사를 가집니다.)

2. AIX4.3기준이면 LIBPATH 환경변수를 (LD_LIBRARY_PATH와 같다고 보시면 됩니다.) 셋팅해보십시오.

라이브러리자체가 문제라면 (특히 makec++sharedlib 같은 명령으로 만들게 되면)

dump -HTv libinfoenc.a

해당 library의 정보를 분석하실 필요가 있습니다. (32비트인지, 내장된오브젝트는 어떤것이고 심볼은 어떤것인지 등등)

homeless

조야의 이미지

정확한 OS는 AIX 5.3 64비트 버전입니다.

컴파일 하나에 5시간을 헤메이며 결국 ㅜ.ㅜ.. 리눅스에서 완벽히 테스트 해보고 갔지만...

역시 OS 무시할수는 없네요..

이후 진행 상황
OS버전 : AIX 5.3 64비트
진행 화면 :

$ xlc -c infoenc.c
$ xlc -o libinfoenc.so -qmkshrobj
$ xlc -o test main.c -L. -linfoenc

ld: 0706-006 라이브러리 파일 -l libinfoenc을(를) 찾거나 열 수 없습니다.
ld:open(): 경로 이름에 있는 파일이나 디렉토리가 존재하지 않습니다.

그래도 못 찾더라구요 ㅡㅜ

bushi :: xlc -o test main.o -L/test -linfoenc 물론 이명령으로 해봤지만.. 똑같은 오류가 나더라구요
harisoo :: 음... 그렇군요 ^^;
SoulreaveR :: 말씀하신대로 진행도 해보고 이름도 바꿔보고 LD_LIBRARY_PATH 에 등록을 해도 마찬가지더라구요..
kihlle :: .a 는 안해봤는데 해볼꺼 그랬나봐요;; 타업체의 경우 so로 잘 쓰신다고 해서.. ㅜ

4분 답변 감사합니다. ㅜㅜ

마무리는 못지었지만 아마도.. 장비를 임대 해서라도 원인분석하고 진행 할 것 같습니다.

날이라도 새야 할까나봐요 ㅜ

IsExist의 이미지

xlc 를 이용해서 shared object를 만드는 방식이 좀 틀립니다.

xlc -G -bM:SRE -bnoentry -o libinfoenc.so infoenc.o -bE:infoenc.exp

infoenc.exp 에는 shared object에서 export 할 함수명을 적어 주면 됩니다.

so가 성공적으로 생성되었는지 확인을 해보세요. 그리고 AIX는 LD_LIBRARY_PATH대신 LIBPATH를 참조합니다.
file libinfoenc.so
nm libinfoenc.so
ldd libinfoenc.so
---------
간디가 말한 우리를 파괴시키는 7가지 요소

첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스

이익추구를 위해서라면..

다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치

---------
간디가 말한 우리를 파괴시키는 7가지 요소

첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스

이익추구를 위해서라면..

다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치

조야의 이미지

염치 불구 말씀 하신 내용중에 몇가지 질문 더 드릴꼐요;

1.
infoenc.exp 파일에

함수명을 적으시라고 하셨는데..

예를 들어 함수병이 abs라고 했을때

infoenc.exp 에 abs 만 적으면 되는건지요?

2. so가 성공적으로 생성 되었을 경우
file libinfoenc.so
nm libinfoenc.so
ldd libinfoenc.so

차례로 실행 하면 되는건지.. 알고 싶습니다.

조야의 이미지

답변 달아주신분들 덕분에 해결 했어요 ^^;;

오늘 동일한 환경의 장비가 임대되어 와서 테스트 해보고

댓글 달러 왔습니다.

진행 내용

infoenc.c 에 해더 파일 없이 c안에 모든 파일이 다 있었는데..

함수병을 해더파일로 빼서 infoenc.c, infoenc.h 파일로 나누었습니다.

infoenc.exp 파일에 함수명을 따로 적었고

xlc -c infoenc.c 로 컴파일을 먼저 하였습니다.

xlc -G -bM:SRE -bnoentry -o libinfoenc.so infoenc.o -bE:infoenc.exp 컴파일 하여 Shared Lib 만들었고

file libinfoenc.so
nm libinfoenc.so
ldd libinfoenc.so

으로 확인 하였습니다.

마지막으로 테스트 소스 컴파일을

xlC -o test main.c -brtl -L. -linfoenc

이렇게 해주었습니다.

감사합니다 ^^

댓글 달기

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