리눅스 *.so 파일 질문 드려요

zzang3757의 이미지

A 머신에서 소스들을 라이브러리로 컴파일하여 A.so 라는 파일을 만들었습니다.

이 A.so 파일과 관련 헤더파일들을 B머신으로 옮겨서 라이브러리 링크하고 컴파일하면 잘 동작 되나요 ? ??

A머신과 B머신의 g++ 컴파일러 버전이나 A.so 라이브러리를 만들때 사용한 mysql 라이브러리 같은 것들의 설치 경로는 다르다는 가정하에요..

관련하여 아시는 고수분들 조언 부탁드려요

jaeyounj의 이미지

제가 알고 있기로는 OS가 같고 컴파일러가 같다면 라이브러리 및 헤더들이 셋이 잘 동작해야 정상입니다.

Hello!

김정균의 이미지

일단, compiler는 동일한 컴파일러를 쓴다고 하면 버전이 크게 차이나지 않는한 크게 문제되지는 않을 것 같습니다.
다만, A.so가 link하고 있는 외부 library가 문제가 될 수 있습니다. 해당 library들이 경로만 다른 것이라면 컴파일시에 -L 옵션으로 해당 위치를 지정해 주시면 되겠네요. 다만 외부 라이브러리들의 soname이 다를 경우에는 link가 되지 않을 수 있습니다.

어쨌든 경우의 수는 많을 수 있을 것 같습니다. 예를 들어 rpath같은 것이 경우의 수로 나타날 수도..