Google에서 찾은 다른 답변을 모두 소진한 후에만 이 글을 게시하고 있습니다. 나는 아직도 내 문제를 이해할 수 없습니다. 저는 g++를 사용하여 Red Hat 시스템에서 32비트를 컴파일하려고 합니다. 이것은 내 명령입니다:
BITS=32
OS=`uname -s`
g++ -D$OS -O3 -Wall -pipe -m$BITS -c *.cpp
그러나 링커는 라이브러리를 찾을 수 없습니다.
/usr/bin/ld: cannot find -lm
collect2: ld returned 1 exit status
하지만... 32비트 libm.so는 일반적인 위치에 존재합니다.
>file /usr/lib/libm.so
/usr/lib/libm.so: symbolic link to `../../lib/libm.so.6'
>file /lib/libm.so.6
/lib/libm.so.6: symbolic link to `libm-2.12.so'
>file /lib/libm-2.12.so
/lib/libm-2.12.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (GNU/Linux), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, not stripped
/usr/lib가 실제로 LD_LIBRARY_PATH에 여전히 나열되어 있는지 확인한 다음 g++ 명령에 -lm을 추가하는 것과 같은 간단한 작업을 시도했습니다.
다음은 모두 설치된 glibc 패키지입니다(glibc는 libm.so 및 libm.a를 제공합니다).
compat-glibc.x86_64 1:2.5-46.2
compat-glibc-headers.x86_64 1:2.5-46.2
glibc.i686 2.12-1.132.el6
glibc.x86_64 2.12-1.132.el6
glibc-common.x86_64 2.12-1.132.el6
glibc-devel.i686 2.12-1.132.el6
glibc-devel.x86_64 2.12-1.132.el6
glibc-headers.x86_64 2.12-1.132.el6
glibc-utils.x86_64 2.12-1.132.el6
또한 다음을 실행하라는 제안도 받았습니다.
>readelf -a /usr/lib/libm.so | grep PATH
그러나 아무것도 출력되지 않습니다.
다른 생각이나 아이디어가 있나요? 다른 문제가 발생할 경우 링커로부터 불만 사항을 접수할 수 있나요? 어떤 응답이라도 대단히 감사하겠습니다.
답변1
글쎄요, 저는 바보예요. 이것은 실제로 --static
내 링크 명령의 옵션입니다. 정적 라이브러리 대신 이를 제거하고 --static
일부 코드 관련 오류를 해결했으며 올바르게 컴파일되었습니다. 당신의 답변에 감사드립니다.