컴파일하고 설치하려고 하는데홍보하다1.54 CentOS의 소스 코드.
문서는 매우 간단하며 인터넷에서 수많은 튜토리얼을 이용할 수 있습니다(1) (2) (삼). 이것이 내가 한 일입니다:
wget http://sourceforge.net/projects/boost/files/boost/1.54.0/boost_1_54_0.tar.gz
tar -xzvf boost_1_54_0.tar.gz
cd boost_1_54_0
./bootstrap.sh --prefix=/usr/local
./b2 install --with=all
이 부스트를 올바르게 컴파일하고 설치하면 /usr/local/lib
모든 것이 괜찮아 보입니다.
이제 부스트가 필요한 다른 소프트웨어를 컴파일했는데 gcc
모든 것이 잘 작동합니다. 내 이해에 따르면 gcc
필요한 라이브러리를 찾는 한 모든 것이 잘 될 것입니다.
하지만 이제 문제는 컴파일된 바이너리를 실행하면 다음 오류가 발생한다는 것입니다.
./myProgram
./myProgramm: error while loading shared libraries: libboost_system.so.1.54.0: cannot open shared object file: No such file or directory
왜 도서관을 찾을 수 없나요?
또한 다음을 시도했습니다.
ldconfig
locate boost
[...]
그러나 부스트 라이브러리를 찾을 수 없습니다. 수동으로 경로를 찾았는데 다음과 같습니다.
/usr/local/lib/libboost_system.so.1.54.0
또한 심볼릭 링크를 만들어 보았지만 /usr/lib
문제가 해결되지 않았습니다.
어떤 아이디어가 있나요? 어떡해?
답변1
프로그램을 컴파일할 때 추가해야 합니다 -Wl,-R/usr/local/lib
.LDFLAGS
-R
링커 옵션입니다(런타임 링커 경로를 지정하는 데 사용됨) - 에 전달되도록 -Wl
지시합니다 .gcc
ld
공유 라이브러리의 경우 링커가 컴파일 중에 해당 라이브러리를 찾도록 해야 합니다.그리고런타임 시(플래그 -L
및 참조 -R
)
당신은 그것을 사용할 수 있습니다
$ ldd myProgramm
런타임 링커 경로가 올바르게 설정되었는지 확인하십시오. 즉, 필요한 공유 라이브러리를 찾을 수 있는지/프로그램이 시작될 때 로드할 공유 라이브러리가 무엇인지 확인하십시오.
답변2
해결 방법으로 환경 변수를 사용하여 실행 파일 실행 앞에 접두사를 지정 LD_LIBRRAY_PATH
하고 라이브러리가 포함된 디렉터리에 대한 경로를 제공할 수 있다고 생각합니다 .so
.
예
$ LD_LIBRARY_PATH=/usr/local/lib ./myProgram
하지만 문제의 애플리케이션을 컴파일하는 데 사용한 방법이 잘못된 것 같습니다. 좀 더 구체적 으로 컴파일 방법을 확인해야 합니다 myProgram
.
답변3
CentOS 7에 Boost 1.54 버전을 설치하려면 다음 명령을 사용하십시오.
sudo wget http://repo.enetres.net/enetres.repo -O /etc/yum.repos.d/enetres.repo
다음 링크에서 lib64icu42-4.2.1-1mdv2010.0.x86_64.rpm을 다운로드합니다. ftp://fr2.rpmfind.net/linux/Mandriva/official/2010.0/x86_64/media/main/release/lib64icu42-4.2.1-1mdv2010.0.x86_64.rpm
RPM 설치:
sudo rpm -ivh lib64icu42-4.2.1-1mdv2010.0.x86_64.rpm
필요한 부스트 라이브러리 버전을 설치합니다.
sudo yum install boost-devel-1.54.0
그게 다야. 좋은 하루 되세요!
리디렉션 링크: https://www.rpmfind.net/linux/rpm2html/search.php?query=libicuuc.so.42()(64비트)