[linux] ld는 기존 라이브러리를 찾을 수 없습니다

이 데비안 레니 시스템에서 응용 프로그램을 g ++와 연결하려고합니다. ld는 지정된 라이브러리를 찾을 수 없다고 불평합니다. 여기의 특정 예는 ImageMagick이지만 몇 가지 다른 라이브러리에서도 비슷한 문제가 있습니다.

링커를 다음과 같이 호출합니다.

g++ -w (..lots of .o files/include directories/etc..) \
-L/usr/lib -lmagic

ld 불평 :

/usr/bin/ld: cannot find -lmagic

그러나 libmagic은 존재합니다 :

$ locate libmagic.so
/usr/lib/libmagic.so.1
/usr/lib/libmagic.so.1.0.0
$ ls -all /usr/lib/libmagic.so.1*
lrwxrwxrwx 1 root root    17 2008-12-01 03:52 /usr/lib/libmagic.so.1 -> libmagic.so.1.0.0
-rwxrwxrwx 1 root root 84664 2008-09-09 00:05 /usr/lib/libmagic.so.1.0.0
$ ldd /usr/lib/libmagic.so.1.0.0
    linux-gate.so.1 =>  (0xb7f85000)
    libz.so.1 => /usr/lib/libz.so.1 (0xb7f51000)
    libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7df6000)
    /lib/ld-linux.so.2 (0xb7f86000)
$ sudo ldconfig -v | grep "libmagic"
    libmagic.so.1 -> libmagic.so.1.0.0

이 문제를 더 진단하려면 어떻게해야합니까? 무엇이 잘못 될 수 있습니까? 내가 완전히 바보 같은 일을하고 있습니까?



답변

문제는 링커가 찾고 libmagic.so있지만libmagic.so.1

빠른 해킹 심볼릭 링크이다 libmagic.so.1libmagic.so


답변

grepsedawk에 의해 공식화 된 것처럼 대답은 , 전화 -l옵션에 있습니다. 이 명령의 매뉴얼 페이지를 보면 다음 중 하나를 수행 할 수 있습니다.g++ld

  • g++ -l:libmagic.so.1 [...]
  • 또는 : g++ -lmagic [...]libs 경로에 libmagic.so라는 심볼릭 링크가있는 경우

답변

공유 라이브러리를 런타임 컴포넌트 ( libmagic1: /usr/lib/libmagic.so.1 → libmagic.so.1.0.0)와 개발 컴포넌트 ( libmagic-dev: /usr/lib/libmagic.so → …) 로 분리하는 것이 데비안 규칙 입니다.

라이브러리의 soname은 libmagic.so.1이므로 실행 파일에 포함되는 문자열이므로 실행 파일이 실행될 때로드되는 파일입니다.

그러나 라이브러리가 -lmagic링커에 대해 지정 되었기 때문에 라이브러리를 찾게되므로 libmagic.so개발에 필요합니다.

이것이 Linux에서 어떻게 작동하는지에 대한 자세한 내용 은 Diego E. Pettenò : 링커 및 이름 을 참조하십시오.


한마디로, 당신은해야합니다 apt-get install libmagic-dev. 이것은 당신에게 libmagic.so뿐만 아니라 같은 컴파일에 필요한 다른 파일을 제공 할 것 /usr/include/magic.h입니다.


답변

우분투에서는 libtool라이브러리를 자동으로 해결하는 설치 가 가능합니다.

$ sudo apt-get install libtool

이것은 ltdl나를 위해 문제를 해결 했는데, 그것은 libltdl.so.7단순히 -lltdlmake에서 설치되었지만 찾지 못했던 것입니다.


답변

내가 잘못 착각 하지 않았 libmagic거나 -lmagicImageMagick과 같은 라이브러리가 아닌 한. ImageMagick을 원한다고 진술했습니다.

ImageMagick은 모든 적절한 옵션을 컴파일러에 제공하는 유틸리티와 함께 ​​제공됩니다.

전의:

g++ program.cpp `Magick++-config --cppflags --cxxflags --ldflags --libs` -o "prog"


답변

위에서 언급했듯이 링커는 찾고 libmagic.so있지만 당신은 가지고 있습니다 libmagic.so.1.

이 문제를 해결하려면 업데이트 캐시 만 수행하십시오.

ldconfig -v 

다음을 실행할 수 있는지 확인하십시오.

$ ldconfig -p | grep libmagic


답변

우분투 저장소에서 libgl1-mesa-dev를 설치하면이 문제가 해결되었습니다.