shared library 사용에 관하여...

khk의 이미지

user의 directory에 shared library를 생성하였습니다.
이를 libmylib.so.1.0.1 로 잡았구요
ldconfig하여 libmylib.so.1 -> libmylib.so.1.0.1 soname을 생성하였습니다.
이 라이브러리를 사용하는 코드를 컴파일 할 경우
gcc -o myprg myprg.c -lmylib -L.
이렇게 컴파일 하려 하는데 다음과 같은 에러가 발생합니다.

/usr/bin/ld: cannot find -lmylib
collect2: ld returned 1 exit status

이렇게 에러가 발생합니다. shared library를 제대로 찾지를 못하는 것 같은데... 이유가 무엇인지요?

gcc -o myprg myprg.c -lmylib.so.1 -L.
해도 마찬가지네요...

(소스코드와 shared library 모두 current dir에 있습니다.)

LD_LIBRARY_PATH도 잡아놓긴 했지만 이건 실행시간에 관여하는 문제인것 같구...
지금은 컴파일타임때 문제입니다.

khk의 이미지

gcc -o myprg myprg.c libmylib.so.1
이런식으로 하니 컴파일이 되긴 되네요.
이 방법이 원래 맞는건가요?

skysign의 이미지

khk700 wrote:
gcc -o myprg myprg.c libmylib.so.1
이런식으로 하니 컴파일이 되긴 되네요.
이 방법이 원래 맞는건가요?

/etc/ld.config

라는 파일에 공유라이브러리 들이 있는 디렉토리를 추가해 주시면 됩니다.

링크할때는 ld.config 에 있는 디렉토리를 참고 하거든요...

khk의 이미지

답변감사합니다.
/etc/ld.so.conf 를 말씀하신 것 같은데요
여기에 넣어줘도 같은 에러가 발생합니다...

mach337의 이미지

/etc/ld.so.conf 편집후에
/sbin/ldconfig를 해보시죠.

khk의 이미지

답변 주신 두 분께 감사드립니다.

다음과 같이 해결하였습니다.
문제는 링커가 참조하는 이름을 별도로 셋팅을 안해줬기 때문이네요.

ln -sf libmylib.so.1 libmylib.so

이렇게 링크를 하나 만들어 주니 mylib를 제대로 인식합니다.