2016-06-15 2 views
1

나는 리눅스에서 공유 라이브러리를 컴파일했다. 라이브러리가 생성 된 후 나는 ldd -r libfoo.so을 실행합니다. 그것은공유 라이브러리의 정의되지 않은 심볼

내 오류 메시지는 다음과 같습니다 정의되지 않은 기호 오류와 함께

ldd -r libcaffe.so 
    linux-vdso.so.1 => (0x00007fffdd541000) 
    /opt/alisentry/$LIB/alisentry_connect.so =>   
    /opt/alisentry/lib64/alisentry_connect.so (0x00007ff8777bc000) 
    /opt/alisentry/$LIB/alisentry_exec.so =>  
    /opt/alisentry/lib64/alisentry_exec.so (0x00007ff8775b8000) 
    /opt/alisentry/$LIB/alisentry_kill.so => 
    ... 
    libc.so.6 => /lib64/libc.so.6 (0x00007ff876291000) 
    /lib64/ld-linux-x86-64.so.2 (0x0000003671800000) 
undefined symbol: 
     _ZN2cv12mulSpectrumsERKNS_11_InputArrayES2_RKNS_12_OutputArrayEi 
     (./libcaffe.so) 
undefined symbol: _ZN2cv17getOptimalDFTSizeEi (./libcaffe.so) 
undefined symbol: _ZN2cv3dftERKNS_11_InputArrayERKNS_12_OutputArrayEii (./libcaffe.so) 

내 질문이 공유 라이브러리가 컴파일 및 링크를 완료한다는 것입니다. 왜 여전히 정의되지 않은 기호가 있습니까? 연결 단계에서 발생하지 않는 이유는 무엇입니까?

+1

아마, 전제 조건으로 링크 될 다른 lib가 필요하기 때문입니다. – LPs

+0

다른 lib가 필요한 경우. 컴파일하는 동안 오류가 발생해야한다고 생각합니다. – Samuel

답변

3

공유 라이브러리를 컴파일하고 연결하면 기본적으로 정의되지 않은 기호가보고되지 않습니다.

모든 기호를 정의해야하는 실행 파일을 생성 할 때 이러한 파일이보고됩니다.

당신은 당신의 LIB 빌드를 중지하고 당신에게 당신이 --no-undefined 옵션을 활성화해야 오류를 제공하기 위해 을 강제로합니다.

관련 문제