라이브러리를 포함하여 컴파일을 하고 싶습니다.
글쓴이: 김희진 / 작성시간: 목, 2003/03/20 - 6:16오후
메우 간단하고 기초적인 부분인데, 맨페이지와 문서를 봐도 쉽게 보이지가
않네요. 어제부터 계속 찾고 있습니다.
아주 간단하고 기초적인 부분이라고 생각됩니다.
흔히... 어떠한 라이브러리를 이용해 컴파일, 링크를 할때
gcc -o ~~~~~~~ -L/usr/lib/~~~ -l~~~
이러한 방식으로 컴파일을 하는데...
문제는 이렇게 하면 해당 컴파이 결과물을 실행하기 위하여
실행하는 해당 시스템에도 그 라이브러리가 있어야 한다는 것입니다.
실행하는 해당 시스템에서도 라이브러리가 없어도 문제없이 실행을 하려면
컴파일 할때 아예 그 라이브러리를 포함해서 컴파일을 해야 할 것입니다.
물론 실행 파일의 크기는 좀 커지겠죠.
어떻게 하면 이러한 방식으로 컴파일을 할 수 있을까요?
현실적인 제 상황은... mysql 관련된 간단한 프로그램을 코딩 했는데..
그 바이너리 실행파일을 mysql 라이브러리가 없는 곳에서
실행을 해야 합니다. 실행하여 다른 서버의 mysql 서버에 접속해서
확인을 하거든요.. 어떻게 해야 할까요?
Forums:
-static option을 사용하면 됩니다.하지만, mysql
-static option을 사용하면 됩니다.
하지만, mysql client 가 없는 곳에서 실해한다면...
ldd <program>
으로 확인하여, 필요한 shared object (library)를 같이 복사하시는 것도 좋은 방법 같습니다.
---
http://coolengineer.com
첨가하자면...
필요한 shared object를 같이 설치 하실때 주의할 점은
Mysql library만 넣는 우를 범하지 마시길 바랍니다.
설치할 시스템이 정말 천차 만별이더군요. 컴파일러도
다양각색으로 깔려있구요. 또 귀찮기도 하구요.
가능하면 static으로 컴파일 해서 배포하는것이 나을것 같습니다. :)
근데 프로그램에 따라서 static으로 해서는 안되는 상황도
있더군요 :?
Re: 첨가하자면...
어떤 상황일까요?
알려주시면 도움이 될거 같습니다..
simple example
예전에 경험했던 예를 들어보자면 static 으로 컴파일한 A라는 프로그램이
있다고 가정 합시다. 근데 이 A라는 녀석은 프로그램 실행 히
dlopen등을 이용하여 외부 모듈 B를 동적으로 불러와 사용한다고 합시다.
여기서 B가 실행될때 A의 영역중 일부를 참조할 경우 dlopen 할 경우에
undefined symbol 에러가 날 것입니다.
마땅한 해결책이 안보여서 그냥 Dynamic으로 컴파일 했던 기억이 납니다.
아예 저런 구조가 나타나지 않는 프로그래밍이 나을것 같습니다.. :(
댓글 달기