2016-08-17 5 views
0

의 두 가지 버전을 찾고, 나는 그것의 두 가지 버전을 원하는 실행 파일을 얻을 올바른 방향? 이것은 나에게 어떤 의미가되지 않습니다!, 내 실행이

배경 : sudo apt-get install libarmadillo-dev를 통해, 나는 내가 특정 매개 변수 (64 비트 워드 사용)와 함께 구축하는 데 필요한 실현 libarmadillo 나는 처음에 설치, 그래서 나는 다음, 최신 버전을 다운로드 구성/설치 만든다 만든다 sudo apt-get remove libarmadillo-dev를 통해 그것을 제거 그것. 아마도 필자는 내 시스템에 libarmadillo 버전을 하나만 가지고있을 것입니다 - 나는 보통 장소에 오래된 라이브러리가 보이지 않습니다.

감사

편집 :

내 메이크 파일은 다음과 같습니다

CC= g++ 
CFLAGS= -Lcontrib/armadillo-7.400.1 -L/usr/include -Lcontrib/mlpack-2.0.1/build/lib -fpermissive -std=c++11 -O0 -g -Wall 
LDFLAGS= -lmlpack -larmadillo 

LDD의 상세 출력이 재미있다, 내가 생각? (libarmadillo.so.7 대한 의존성을 나열)

$ ldd -v ./a.out | grep armadillo 
$ libarmadillo.so.7 => /usr/lib/x86_64-linux-gnu/libarmadillo.so.7 (0x00007fd5e29a0000) 
$ libarmadillo.so.4 => not found 
$ /usr/lib/x86_64-linux-gnu/libarmadillo.so.7: 

후자 섹션은 :

/usr/lib/x86_64-linux-gnu/libarmadillo.so.7: 
    ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2 
    libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6 

용장 출력에서 ​​"누락"libarmadillo.so.4의 언급이없는 한 나는 아주 이상한 것을 안다.

+0

'a.out' 빌드는 어떻게 작성 되었습니까? 당신의 메이크 파일 및/또는 구성 파일에 무엇이 있습니까? – wasthishelpful

+0

g ++를 사용하여'CFLAGS = -Lcontrib/armadillo-7.400.1 -L/usr/include -fpermissive -std = C++ 11 -O0 -g -Wall' 및'LFLAGS = -larmadillo'로 컴파일됩니다. 질문에 ldd의 상세한 출력을 첨부했습니다 ... – ricky116

답변

-1

때때로 리눅스는 하나의 동적 라이브러리에 대한 많은 심볼릭 링크를 생성합니다. 나는 그 이유에 대해 아무런 문제가 없다는 것을 알지 못한다. 그래서, 다음과 같은 새로운 심볼릭 링크를 만들 수 있습니다 : ln -s path_to_my_so_lib/my_lib.so /usr/lib/x86_64-linux-gnu/libarmadillo.so.4

0

나는 그것을 알아 냈다고 생각합니다. 결과는 특히 위안하지 않습니다.

나는 libarmadillo에 종속되어 mlpack을 다시 설치 한 다음 다시 및 libarmadillo.so.4에 대한 요구 사항이 사라 졌어요.

무슨 일이 있었 생각 과정은 I입니다 :

  • 이전 버전으로 구성 libmlpack을 설치 libarmadillo
  • 의 설치 이전 버전
  • 나는 libarmadillo의 최신 버전, libarmadillo 오래된 이렇게 제거 된 필요 실현하고 새로운 것을 설치했다.
  • 는 cmake가/을 사용하여 mlpack 재건하지만하지 않았다 make install 내 실행 제작
  • 이제 이전 libarmadillo 필요 mlpack 가리키는 된 실행 파일을 가지고 있지만, 그것은 또한 새로운 libarmadillo
  • 를 가리키는

mlpack이 (가) make install으로 다시 작성되면 문제가 해결됩니다.나는 ldd의 자세한 출력이 (이유는 에서 이전 라이브러리에 대한 종속성이 있음)을 찾고있는 이유에 대해 플래그를 지정하지 않은 것에 놀랐습니다. ldd이 수행 할 수 있습니까?