web-dev-qa-db-ja.com

共有ライブラリの読み込み中にエラーが発生しました:libreadline.so.7:共有オブジェクトファイルを開けません:そのようなファイルまたはディレクトリはありません

deepmind/dqn の環境をセットアップしようとしています。走る ./install_dependencies.shインストールする

LuaJIT and Torch 7.0
nngraph
Xitari
AleWrap

しかし、私は得ました:

/home/dqn/torch/bin/luajit: error while loading shared libraries: libreadline.so.7: cannot open shared object file: No such file or directory

=> Torch7 has been installed successfully

Installing nngraph ...
/home/dqn/torch/bin/luajit: error while loading shared libraries: libreadline.so.7: cannot open shared object file: No such file or directory
Error. Exiting.

install_dependencies.shは:

# Install dependencies for Torch:
Sudo apt-get update
Sudo apt-get install -qqy build-essential
Sudo apt-get install -qqy gcc g++
Sudo apt-get install -qqy cmake
Sudo apt-get install -qqy curl
Sudo apt-get install -qqy libreadline-dev
Sudo apt-get install -qqy git-core
Sudo apt-get install -qqy libjpeg-dev
Sudo apt-get install -qqy libpng-dev
Sudo apt-get install -qqy ncurses-dev
Sudo apt-get install -qqy imagemagick
Sudo apt-get install -qqy unzip
Sudo apt-get update

echo "==> Torch7's dependencies have been installed"

# Build and install Torch7
cd /tmp
rm -rf luajit-rocks
git clone https://github.com/torch/luajit-rocks.git
cd luajit-rocks
mkdir -p build
cd build
git checkout master; git pull
rm -f CMakeCache.txt
cmake .. -DCMAKE_INSTALL_PREFIX=$PREFIX -DCMAKE_BUILD_TYPE=Release
RET=$?; if [ $RET -ne 0 ]; then echo "Error. Exiting."; exit $RET; fi
make
RET=$?; if [ $RET -ne 0 ]; then echo "Error. Exiting."; exit $RET; fi
make install
RET=$?; if [ $RET -ne 0 ]; then echo "Error. Exiting."; exit $RET; fi


path_to_nvcc=$(which nvcc)
if [ -x "$path_to_nvcc" ]
then
cutorch=ok
cunn=ok
fi

# Install base packages:
$PREFIX/bin/luarocks install cwrap
$PREFIX/bin/luarocks install paths
$PREFIX/bin/luarocks install torch
$PREFIX/bin/luarocks install nn

[ -n "$cutorch" ] && \
($PREFIX/bin/luarocks install cutorch)
[ -n "$cunn" ] && \
($PREFIX/bin/luarocks install cunn)

$PREFIX/bin/luarocks install luafilesystem
$PREFIX/bin/luarocks install penlight
$PREFIX/bin/luarocks install sys
$PREFIX/bin/luarocks install xlua
$PREFIX/bin/luarocks install image
$PREFIX/bin/luarocks install env

echo ""
echo "=> Torch7 has been installed successfully"
echo ""


echo "Installing nngraph ... "
$PREFIX/bin/luarocks install nngraph
RET=$?; if [ $RET -ne 0 ]; then echo "Error. Exiting."; exit $RET; fi
echo "nngraph installation completed"

echo "Installing Xitari ... "
cd /tmp
rm -rf xitari
git clone https://github.com/deepmind/xitari.git
cd xitari
$PREFIX/bin/luarocks make
RET=$?; if [ $RET -ne 0 ]; then echo "Error. Exiting."; exit $RET; fi
echo "Xitari installation completed"

echo "Installing Alewrap ... "
cd /tmp
rm -rf alewrap
git clone https://github.com/deepmind/alewrap.git
cd alewrap
$PREFIX/bin/luarocks make
RET=$?; if [ $RET -ne 0 ]; then echo "Error. Exiting."; exit $RET; fi
echo "Alewrap installation completed"

echo
echo "You can run experiments by executing: "
echo
echo " ./run_cpu game_name"
echo
echo " or "
echo
echo " ./run_gpu game_name"
echo
echo "For this you need to provide the rom files of the respective games (game_name.bin) in the roms/ directory"
echo

コードをテストすると./run_gpu {game_name}、手に入れました:

../torch/bin/luajit: error while loading shared libraries: libreadline.so.7: cannot open shared object file: No such file or directory

私が走ると:

ldconfig -p | grep readline

私のバージョンは6です

libreadline.so.6 (libc6,x86-64) => /lib/x86_64-linux-gnu/libreadline.so.6
libreadline.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libreadline.so
libguilereadline-v-18.so.18 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libguilereadline-v-18.so.18
libguilereadline-v-18.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libguilereadline-v-18.so

しかし、私はlibreadline7をインストールできません:

Sudo apt-get install libreadline7-dev

Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package libreadline7-dev

どうすればlibreadline7をインストールできますか?

1
zhanpython

必要なファイル/lib/x86_64-linux-gnu/libreadline.so.7は、libreadline7のバージョンではなく、パッケージlibreadline-devによって提供されます。 Ubuntuディストリビューションにはlibreadline7-devなどのパッケージはありません。

libreadline.so.6とその友達がいるので、おそらくUbuntu 16.04または14.04を使用しています。 libreadline7パッケージはUbuntu 18.04で使用できます。したがって、ここでの簡単な答えは、18.04にアップグレードまたはインストールすることで取得できるということです。確認するには、次を実行します

apt policy libreadline7

インストールされていない場合は、

Sudo apt update
Sudo apt install libreadline7

本当に汚いハックがあります(お勧めできませんが、それほど危険ではありません)。このステップを通過して、アップグレードをコミットする前に別の問題が発生するかどうか、または本当にアップグレードできない場合に試すことができます。たった今。これは、古いバージョンのライブラリを指すシンボリックリンクを作成して、プログラムがlibreadline.so.7を使用していると認識し、実際にlibreadline.so.6を使用していることを示します。

Sudo ln -s /lib/x86_64-linux-gnu/libreadline.so.6 /lib/x86_64-linux-gnu/libreadline.so.7

これにより、プログラムが実行される可能性があります。しかし、意味のあるエラーメッセージが表示されずに、不可解にクラッシュする可能性もあります。このようなシンボリックリンクをそのままにしておくと、サードパーティのソースからインストールした他のプログラムも、不足している依存関係の報告に失敗し、不思議なことにクラッシュする可能性があります。何をしたかを忘れて、おかしなシステムの何が悪いのか疑問に思うかもしれないので、テストのためにこのようなことを試すことだけが良いです。いつでも、シンボリックリンクlibreadline.so.7を削除して、開始した場所に戻すことができます。

1
Zanna