다음 명령을 사용하여 Linux 커널을 구성하려고 하면 링커 오류가 발생합니다 menuconfig
.
# make menuconfig
HOSTLD scripts/kconfig/mconf
/usr/local/bin/ld: scripts/kconfig/lxdialog/checklist.o: undefined reference to symbol 'acs_map'
/usr/local/bin/ld: note: 'acs_map' is defined in DSO /lib/libtinfo.so.5 so try adding it to the linker command line
/lib/libtinfo.so.5: could not read symbols: Invalid operation
collect2: ld returned 1 exit status
make[1]: *** [scripts/kconfig/mconf] Error 1
make: *** [menuconfig] Error 2
무슨 문제가 있는지 아시나요? 저는 CentOS 6.2를 실행하고 있으며 필요한 모든 라이브러리가 설치되어 있다고 확신합니다.
답변1
binutils를 2.22로 업그레이드한 후에도 동일한 문제가 발생했습니다. 다음 줄을 추가하여 이 문제를 해결했습니다.스크립트/kconfig/Makefile:
HOSTLOADLIBES_mconf = -ltinfo
분명히 링커에 대한 변경 사항에는 더 이상 무료 라이브러리가 포함되지 않습니다. 애플리케이션에 필요한 모든 라이브러리를 명시적으로 링크해야 합니다. 자세한 내용은 아래를 참조하세요.DSO 링크 변경
-ltinfo
3.2.58 커널의 경우 줄 끝에 추가되므로 HOSTLOADLIBES_mconf
원본은 다음과 같습니다.
HOSTLOADLIBES_mconf = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ldflags $(HOSTCC))
될 것입니다:
HOSTLOADLIBES_mconf = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ldflags $(HOSTCC)) -ltinfo
답변2
libncurses.so 사이에 심볼릭 링크를 만들어 보셨나요? 그리고 libtinfo.so. ?
cd /lib
ln -s /usr/lib/libncurses.so.5 /usr/lib/libtinfo.so.5
libncurses 라이브러리 이름은 버전에 따라 다를 수 있습니다.
답변3
커널 5.XY 이상에서는 HOSTLDLIBS_mconf
script/kconfig/Makefile을 다음과 같이 수정했습니다.
HOSTLDLIBS_mconf = $(shell . $(obj)/mconf-cfg && echo $$libs) -ltinfo
내 Centos 6.8 시스템에서 실행 중입니다.