次のコマンドを使用して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システムで実行しています。