2017-11-22 37 views
0

바이너리 및 일부 동적 라이브러리로 구성된 내 응용 프로그램을 컴파일 중입니다. 내 메이크는이 모든 라이브러리 (직접 연결되어 동적으로로드)가 첫 번째 런타임시 ../lib에서 검색되도록 작동 아산없이 내 정상적인 빌드를 들어asan을 사용하여 프로그램을 실행하면 rpath가 사용되지 않습니다.

LDFLAGS=-Wl,-rpath='$$ORIGIN/../lib',-rpath=/opt/suse/lib64,--disable-new-dtags 

를 사용합니다.

CXXFLAGS와 LDFLAGS에 대해 -fsanitize = address와 함께 asan을 사용하면 ld는 동적으로로드 된 (dlopen) 라이브러리를 검색하는 데 rpath를 더 이상 사용하지 않습니다.

echo $LD_LIBRARY_PATH 
:/EDI_TOOLS/ORACLE/client:/home1/conic/Trafo/program/UmsetzerV19 

strace를 출력 :

open("tls/x86_64/Consumer_EndTransaction.so", O_RDONLY) = -1 ENOENT (No such file or directory) 
open("tls/Consumer_EndTransaction.so", O_RDONLY) = -1 ENOENT (No such file or directory) 
open("x86_64/Consumer_EndTransaction.so", O_RDONLY) = -1 ENOENT (No such file or directory) 
open("Consumer_EndTransaction.so", O_RDONLY) = -1 ENOENT (No such file or directory) 
open("/EDI_TOOLS/ORACLE/client/Consumer_EndTransaction.so", O_RDONLY) = -1 ENOENT (No such file or directory) 
open("/home1/conic/Trafo/program/UmsetzerV19/Consumer_EndTransaction.so", O_RDONLY) = -1 ENOENT (No such file or directory) 
open("/usr/lib64/gcc/x86_64-suse-linux/5/Consumer_EndTransaction.so", O_RDONLY) = -1 ENOENT (No such file or directory) 
open("/etc/ld.so.cache", O_RDONLY)  = 4 
fstat(4, {st_mode=S_IFREG|0644, st_size=83482, ...}) = 0 

objdump를 -x이 출력 준다 (더 사이가되지만 RPATH 올바르게 설정). NEEDED의 모든 라이브러리가 올바르게 발견되었습니다.

Dynamic Section: 
    NEEDED    libasan.so.2 
    NEEDED    libKernel.so 
    NEEDED    libCUtil.so 
    NEEDED    libApi.so 
    NEEDED    libactivemq-cpp.so.19 
    NEEDED    libnorm.so 
    NEEDED    libcurl.so.4 
    NEEDED    libcurlpp.so.0 
    NEEDED    libutilspp.so.0 
    NEEDED    libtdsodbc.so.0 
    NEEDED    libicuuc.so.58 
    NEEDED    libicui18n.so.58 
    NEEDED    libxerces-c-3.1.so 
    NEEDED    libxalan-c.so.111 
    NEEDED    libldap60.so 
    NEEDED    libclntsh.so.12.1 
    NEEDED    libuuid.so.1 
    NEEDED    libz.so.1 
    NEEDED    libdl.so.2 
    NEEDED    libstdc++.so.6 
    NEEDED    libm.so.6 
    NEEDED    libgcc_s.so.1 
    NEEDED    libpthread.so.0 
    NEEDED    libc.so.6 
    RPATH    $ORIGIN/../lib:/opt/suse/lib64 

나는

g++-5 (SUSE Linux) 5.3.1 20160301 [gcc-5-branch revision 233849] 
GNU ld (GNU Binutils; SUSE Linux Enterprise 11) 2.25.0 
ld.so-1.7.0 

내가 뭔가를 놓치고와 SLES 11을 사용하고?

답변