공유 라이브러리에 정적 라이브러리를 추가할 수 있나요?

lunarainbow의 이미지

gcc -c -fPIC test.c /usr/local/lib/mysql/libmysqlclient.a -I/usr/local/include/mysql -L/usr/local/lib/mysql -lz

gcc: /usr/local/lib/mysql/libmysqlclient.a: linker input file unused because linking not done
gcc: -lz: linker input file unused because linking not done

컴파일을 하면 위와 같은 메세지가 뜹니다.

이 test.c를 공유라이브러리(.so)로 만들고자 하는데, mysql API를 사용합니다.

/usr/local/lib/mysql/libmysqlclient.a =>  -static -lmysql

이렇게 바꾸어도 같은 메세지가 출력됩니다.

사정상 새로 만들 라이브러리는 공유라이브러리여야 합니다.

어떻게 해야 저 메세지를 없앨 수 있을까요? :cry:

무시하고 넘어가보니 mysql 함수가 등록되지 않아 mysql 사용하는 부분에서 에러가 나던데...

아. 그래서 나중에 이렇게 만든(메세지 나온거 무시하고 만든..) 라이브러리를 사용할시 컴파일 옵션에 mysql에 관한것을 링크시켜주면 잘 돌아가게 되긴 합니다.

하지만 저는 그것을 원하지 않기 때문에.. ㅡㅜ

지금 제가 생각할 수 있는 방법은,

mysql 함수를 사용할때 모두 dlopen 등을 사용하여 mysql 함수를 불러들여서 gcc 옵션에 적지 않아도 되도록 하는것 뿐이예요.

pynoos의 이미지

-c 가 들어가면, -L, -l (엘) option 들과 같이 link에 관련된 것들은 의미가 없게 됩니다.

또한 archive 파일들이 shared object로 들어갈 수있냐고하셨는데, archive 를 만들때 들어간 object 를 컴파일할 당시 -fPIC 같이 position independent code 형태로 만들지 않았으면, shared object로 만들 수 없습니다.

아마 libmysqlclient.a 가 그런 option하에 만들어지지 않았으므로 불가능할 것 같습니다.