이 데비안 레니 시스템에서 응용 프로그램을 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.1
에libmagic.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
단순히 -lltdl
make에서 설치되었지만 찾지 못했던 것입니다.
답변
내가 잘못 착각 하지 않았 libmagic
거나 -lmagic
ImageMagick과 같은 라이브러리가 아닌 한. 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를 설치하면이 문제가 해결되었습니다.