2011-01-27 6 views
4

꽤 많은 라이브러리 (libjpeg와 같은 일반적인 시스템 라이브러리는 시스템 전체에 설치되지 않은 일부 개인 라이브러리)에 의존하는 C++ 프로그램이 있습니다. 이 프로그램은 컴퓨터 A (Debian Squeeze)에서 잘 컴파일됩니다. 컴퓨터 B (Ubuntu maveric)와 컴퓨터 C (Arch)에서 프로그램을 실행하고 싶습니다. 두 기계 B + C가 극한의 최소 설치라고 가정합니다. 내 프로그램에서 사용하는 모든 라이브러리를 찾아야하며, 동일한 버전이 아닌 라이브러리가 있으면 찾아야합니다.리눅스 바이너리는 공유 라이브러리와 독립적입니다.

모든 의존성 (ldd 또는 무언가 사용)에 대한 내 프로그램을 검사 할 수있는 프로그램이 모든 종속성을 수집하고이 시스템을 사용하도록 이진 파일에 지시하며 다른 시스템과 함께 제공되는 이러한 libs 만 알려줍니다 ?

감사합니다.

+4

행운을 빕니다. 또는 컨벤션과 마찬가지로 소스를 전달할 수도 있습니다. –

+1

"전달"할 계획이 아닙니다. 나는 내 용도로 이것을 원한다. 나는 소스 코드를 가지고 있지만 재 컴파일은 정말 고통 스러울 수있다. 예를 들어 컴파일러는 일반적으로 다른 버전의 lib를 사용하는 것이 안전하다고 가정합니다. 그러나 항상 그런 것은 아닙니다. 저는 프로그램이 모든 컴퓨터에서 똑같은 lib를 사용하는지 100 % 확신하고 싶습니다. – Joekk3

+1

제대로하고있는 것처럼 들리지는 않습니다. 소스를 기반으로 구축하기 쉽습니다. 내가 너라면 그 문제를 해결하는 데 집중할거야. –

답변

2

나는 당신의 질문을 이해할 수는 없지만, 패키지와 함께 라이브러리를 보내고 싶다면 LD_LIBRARY_PATH를 사용하여 링커가 선적 된 라이브러리 디렉토리를 먼저 살펴보아야합니다.

더 많은 것이 있다면, 이것에 대한 경험이 있기 때문에 대답을 수정할 수 있습니다. 네가 요구하는 것을 내가 확실히 알고 싶을 뿐이야.

+0

맞아. 그게 효과가 있니? 컴파일러 (제 경우에는 gcc)가 LD_LIBRARY_PATH에서 libs를 항상 사용하기 전에/usr/lib에있는 libs를 말합니까? 또한 해당 경우 : ldd -v (모든 종속성을 올바르게 gove해야합니까?) 출력을 자동으로 구문 분석하고 모든 libs 디렉터리로 복사하는 프로그램이 있습니까? – Joekk3

+1

+1을 LD_LIBRARY_PATH 솔루션에 추가하십시오. 다른 옵션은 모든 종속 라이브러리의 정적 빌드를 만들고 모 두 하나의 모 놀리 식 바이너리로 연결하는 것입니다. – gravitron

+0

조엑, 맞아. 순서는 rpaths (요청하는 실행 파일에 구워진 lib 디렉토리), LD_LIBRARY_PATH, /etc/ld.so.conf의 기본 경로입니다. 자세한 내용은 http://linux.die.net/man/8/ld-linux를보십시오. –

2

귀하의 질문에 대한 답은 g ++ -static과 같이 정적으로 링크하는 것입니다.

+0

+1입니다. 정적 빌드를 릴리스 모드로 분리하고 디버그/개발 모드에서는 제공하지 않습니다. –

+0

디버그와 릴리스의 유일한 차이점은 -strip입니다. – Joshua

+0

그러면 표준 라이브러리가 아닌 다른 것을 포함한다면 빌드 시간이 오래 걸린다는 단순한 사실 때문에 바보라고 말할 수 있습니다. –