2012-01-23 4 views
1

libpng를 버전 1.2에서 1.5로 업그레이드해야합니다. 나는 이것 때문에해야한다 : libpng warning: Application built with libpng-1.2.26 but running with 1.5.2. 나는 Lubuntu 11.10을 사용하고 있습니다. 그리고 Canonical 저장소에서 libnpg 1.5는 아직 데비안 패키지에 있지만 처음에는 저에게 맞을 테스팅 패키지 (http://packages.debian.org/search?keywords=libpng)가 있습니다. 데비안 저장소를 Synaptec에 추가했는데 libpng15를 설치할 수있었습니다. 그러나 libpng15 대신 libpng12를 사용했습니다. IDE는 IDE가 libpng15 대신 libpng12를 사용하는 일부 소스 코드를 컴파일 할 때 libpng12를 대체합니다. 최신 버전이 아직 배포 저장소에없는 패키지 업그레이드

내가 libpng15 뎁 패키지를 다운로드 한이 문제를 해결하려고하기 위해, 그것을 압축 해제하고 , 충돌을 대체하고 libpng15 텍스트로 제어 파일의 태그를 제공합니다 변경. 그런데 수정 된 deb를 실행했는데 libpng12가 대체물없이 제거 되었기 때문에 GDebi 오류와 일반적인 시스템 오류 만있었습니다. Lubuntu는 크게 의존하기 때문에 컴퓨터가했기 때문에 Lubuntu를 다시 설치해야했습니다. Linux에서는 다시 부팅하지 않습니다. 예,이 솔루션은 제가 생각하기에 가장 깔끔한 방법은 아닙니다.

따라서 은 패키지를 업그레이드하고 최신 버전이있는 이전 버전을 대체 할 수있는 방법이 있지만 배포 저장소에 아직 없습니다. 나는 ubuntu repository for libpngHow to upgrade a package in linux that was built from source?을 발견했다. 지금까지 결정적이지는 않지만.

답변

3

최신 버전이 아직 배포 저장소에없는 패키지를 업그레이드하고 교체하는 방법을 찾지 못했습니다. 그러나 어떤 라이브러리 X가 다른 라이브러리 Y의 특정 버전에 의존하는 경우, X의 소스 코드를 변경하지 않는 한 해당 종속 버전을 변경할 방법이 없다는 것을 깨달았습니다. 즉, 라이브러리 X는 다음과 같습니다. 원하는 버전을 가리 키도록 다시 컴파일합니다 (일반적으로 일부 구성 태그 사용). 라이브러리 Y의 심볼릭 링크를 수정하여 새로운 버전을 가리키는 트릭을 만들 수도 있습니다. 그런 다음 컴파일러는 불평 할 것이고 이전 버전을 요구할 것입니다.

어쩌면 지금은 분명해 보입니다.그러나 재 컴파일해야하는 소프트웨어가 많은 시간을 필요로하거나 해결되지 않은 의존성을 가지고 있거나 오류를 만든 경우 열역학 법을 위반하는 경우 컴파일을 피하려고 노력할 것입니다.

제 경우에는 Qt를 다시 컴파일해야하고 -system-libpng 구성 태그를 사용하여 Qt가 내장 된 시스템이 아닌 시스템 libpng 라이브러리를 사용해야한다는 것을 이해했습니다. 그리고 8 시간의 컴파일 후에 나는 성공적으로 libpng 문제를 해결할 수있는 빌드를 얻었습니다.

의견과 제안에 감사드립니다.

+0

문제가 해결되면 다행입니다. 항상 좋은 느낌입니다. +1 업데이트/폐쇄. – jpaugh

1

문제가 발생하는 경우 소스에서 간단하게 컴파일하고 대신에 /usr/local으로 설치하는 것이 더 쉽습니다. 내가 컴파일 한 프로그램에 대한 몇 가지 라이브러리 의존성을 위해이 작업을 수행했다. 그러나 컴파일중인 프로그램이 올바른 버전의 패키지를 선택하는 데 어려움을 겪고있는 것 같습니다. 내 의견으로는, 그것이 진짜 문제입니다. 여러 버전의 라이브러리를 동시에 설치하는 것은 지원되지만 데비안과 우분투 저장소를 혼합하는 경우에는 그렇지 않을 수도 있습니다.

프로그램을 컴파일 할 때 -lpng 대신 gcc -lpng15을 사용하십시오. gcc 정보 설명서에 따르면 -lname 옵션을 사용하면 링커가 lib 폴더에서 libname.a을 찾습니다. 내 시스템 (Ubuntu 10.04)에서 libpng.alibpng12.a에 대한 심볼릭 링크입니다. 이것이 프로그램이 잘못된 lib를 선택하는 이유입니다.

+0

더 나은 방법으로, 로컬 상자에있는 데비안 소스에서 패키지를 다시 빌드하십시오. –

+0

아, 음, 항상 바닐라를 좋아해요. – jpaugh

+0

'ldd 프로그램으로 | grep libpng''libpng12.so.0 => /lib/i386-linux-gnu/libpng12.so.0 (0x007ec000)'을 얻습니다. 어떤 라이브러리에서이 라이브러리에 대한 참조를 바꿀 수 있습니까? – AxeEffect

0

이 ppa : https://launchpad.net/~linaro-maintainers/+archive/overlay을 추가하십시오. Oneiric 용 libpng1.5가 포함되어 있습니다.

당신은 제대로 libpng15에 대한 링크를

sudo add-apt-repository ppa:linaro-maintainers/overlay 
sudo apt-get update 
sudo apt-get install libpng1.5 
+0

이 패키지와 데비안에서 제공하는 문제는 libpng12를 대체하지 않는다는 것입니다. 그래서 내가 참조 libpng libpng15 대신 libpng12를 가리 키도록 컴파일합니다. – AxeEffect

0

를 실행하여 설치할 수 있습니다, 당신은 또한 를 설치해야합니다.

관련 문제