2010-07-26 4 views
0

g ++의 정적 및 동적 라이브러리 링크에 대한 C++ Cookbook 자습서를 따르고 있습니다. 나는 이진 벌금을 구축 할 수 있습니다,하지만 난 그것을 실행할 때 오류를g ++ 4.4 "공유 라이브러리를로드하는 중 오류가 발생했습니다."

./hellobeatles를 얻을 : 오류가 공유 라이브러리를로드하는 동안 : libjohnpaul.so : 공유 객체 파일을 열 수 없습니다 : 그런 파일이나 디렉토리

I을 사용되는 명령 : g ++ -o hellobeatles hellobeatles.cpp -L ../johnpaul/ -L ../georgeringo/ -ljohnpaul -lgeorgeringo 프로그램 빌드 및 I 명시 적으로 같은 경로를 게시하면 잘 실행

: g ++ -o hellobeatles hellobeatles.cpp ../johnpaul/libjohnpaul.so ../georgeringo/libgeorgeringo.so

첫 번째 명령에서 libaries에 잘못 연결되어 있습니까? 또는 내가 필요로하는 구성 설정이 있습니까?

VirtualBox에서 우분투 9.10 게스트 VM을 실행 중입니다. 여기에 -v 내장 사양 사용 중입니다. 대상 : x86_64-linux-gnu 구성 : ../src/configure -v --with-pkgversion = 'Ubuntu 4.4.1-4ubuntu9'--with-bugurl = file : /// usr/share/doc /gcc-4.4/README.Bugs --enable-languages ​​= c, C++, fortran, objc, obj-C++ --prefix =/usr - 사용 가능 - 공유 - 사용 가능 -multarch - 사용 가능 -linker-build-id --with-system-zlib --libexecdir =/usr/lib --without-included-gettext - 가능 스레드 = posix --with-gxx-include-dir =/usr/include/C++/4.4 --program -suffix = -4.4 - enable-nls --enable-clocale = gnu - 가능 libstdcxx-debug - 가능 objc-gc --disable-werror --with-arch-32 = i486 --with-tune = 일반 - 사용 가능 검사 = 해제 - 빌드 - x86 = 64-linux-gnu - 호스트 = x86_64-linux-gnu - 대상 = x86_64-linux-gnu 스레드 모델 : posix gcc 버전 4.4.1 (Ubuntu 4.4 .1-4ubuntu9)

답변

2

동적 링커 e xpects를 사용하여 /usr/lib, /lib, /usr/local/lib 등의 공유 라이브러리를 찾을 수 있습니다. 그것은 확실히 이 아니며../johnpaul/에 있습니다.

라이브러리를 전역 위치에 설치하려면 해당 위치에 설치하면됩니다.

그렇지 않으면 동적 링커에서 찾을 위치를 지정해야합니다.

더 나은 방법은 실행 파일로 인코딩 RPATH에 추가하는 것입니다

export LD_LIBRARY_PATH=/path/to/johnpaul:/path/to/georgeringo 
:

g++ -o hellobeatles hellobeatles.cpp \ 
    -L ../johnpaul/ -L ../georgeringo/ -ljohnpaul -lgeorgeringo \ 
    -Wl,-rpath=/path/to/johnpaul:/path/to/georgeringo 

대체 (덜 선호) 접근법이다