web-dev-qa-db-ja.com

Macのreadlineライブラリに関する問題

Macでいくつかのプログラムを更新していて、gnuplotの実行中に突然問題が発生しました。エラーは次のようなものでした:

dyld: Library not loaded: /usr/local/opt/readline/lib/libreadline.7.dylib
Referenced from: .../something/...
Reason: image not found
Trace/BPT trap: 5

それは私自身のエラーではありません(非常に近いこのエラーをインターネットからコピーして貼り付けます)。それ以降、gnuplotをアンインストールして、インストールできなくなったためです。

brew install gnuplotを実行すると、次のようになります。

Warning: You are using macOS 10.11.
We (and Apple) do not provide support for this old version.
You will encounter build failures with some formulae.
Please create pull requests instead of asking for help on Homebrew's GitHub,
Discourse, Twitter or IRC. You are responsible for resolving any issues you experience, as you are running this old version.

==> Installing dependencies for gnuplot: graphite2, harfbuzz, pango and qt
==> Installing gnuplot dependency: graphite2
==> Downloading https://github.com/silnrsi/graphite/releases/download/1.3.13/gra
Already downloaded: /Users/me/Library/Caches/Homebrew/downloads/e37be24d841649b167ec4be5e60ac444d5ec859aa32d694e93df5ff36c05b2bf--graphite2-1.3.13.tgz
==> cmake -DCMAKE_C_FLAGS_RELEASE=-DNDEBUG -DCMAKE_CXX_FLAGS_RELEASE=-DNDEBUG -D
Last 15 lines from /Users/me/Library/Logs/Homebrew/graphite2/01.cmake:
2019-01-29 12:04:38 +0100

cmake
-DCMAKE_C_FLAGS_RELEASE=-DNDEBUG
-DCMAKE_CXX_FLAGS_RELEASE=-DNDEBUG
-DCMAKE_INSTALL_PREFIX=/usr/local/Cellar/graphite2/1.3.13
-DCMAKE_BUILD_TYPE=Release
-DCMAKE_FIND_FRAMEWORK=LAST
-DCMAKE_VERBOSE_MAKEFILE=ON
-Wno-dev
-DHAVE_CLOCK_GETTIME:INTERNAL=0

CMake Error: No source or binary directory provided

Do not report this issue to Homebrew/brew or Homebrew/core!

These open issues may also help:
Update graphite2 to reference src dir in cmake https://github.com/Homebrew/homebrew-core/pull/36376

Error: You are using macOS 10.11.
We (and Apple) do not provide support for this old version.
You will encounter build failures with some formulae.
Please create pull requests instead of asking for help on Homebrew's GitHub,
Discourse, Twitter or IRC. You are responsible for resolving any issues you experience, as you are running this old version.

GnuplotのインストールファイルでsourceForgeからダウンロードすると、次のように表示されます。

Readline issues:

As I understand the situation, Apple ships OSX with a "fake" libreadline shared
library. The file /usr/lib/libreadline.dylib is really a symlink to a compatibility
layer over the BSD libedit library. But the compatibility isn't complete, and in
particular it is missing some routines used for readline support by gnuplot. The
./configure script should be able to cope with this. But you will still be left
without some of the functionality of the "real" libreadline. For one thing,
libedit doesn't handle UTF-8 input.

You have several options:

1) Delete the fake libreadline libraries from OSX and install the real gnu
libreadline as a system library.

2) Install the real gnu libreadline into your personal account and tell gnuplot
to use it: ./configure --with-readline=/my/private/readline/installdir
This may require some playing around with additional -L and -I definitions in
CFLAGS, and is probably harder than replacing the system copy of the library.

3) Use gnuplot's built-in readline routines.  These now support UTF-8 input and
tab-completion of file names. ./configure --with-readline=builtin

どのようにbrewで2番目のオプションのようなことができるか知っていますか?

どうもありがとう

編集:

私はすでに試しています:brew switch readline 8.0.0brew install gnuplot --with-readline=/usr/local/Cellar/readline/8.0.0/libが動作しません...

6
kipgon

私のmacOSコンピューターでgnuplotを実行しようとすると、まったく同じ問題が発生しました。それを解決するために、インターネットで見つけたいくつかの提案を試しましたが、どれもうまくいきませんでした。たとえば、brewの更新/アップグレード、readlineの削除、インストール、再インストール、bashのアップグレードなど。

だから、私は最近状況を解決しました。次の行では、私が行ったプロセスについて説明しようとしました。

  1. cdlibreadline.7.dylibのある場所に、この場合は/usr/local/opt/readline/lib/

  2. 記載したところ、libreadline.8.0.dylibとソフトリンクlibreadline.8.dylibしか見つかりませんでした。

  3. Gnuplotが探すソフトリンクを作成するために、libreadline.8.0.dylibライブラリを指す新しいソフトリンクを作成しました。この場合は、7つの番号が付けられたライブラリlibreadline.7.dylibです。

    $ Sudo ln -s libreadline.8.0.dylib libreadline.7.dylib
    

それで全部です。ターミナルまたはコマンドラインアプリケーションを再起動する必要があるかもしれません。

14
Víctor Duarte

参考になる場合:私は同様のエラーメッセージに遭遇し、gnuplotがgawkに依存しており、自動的にインストールされたgawkのバージョンには、古いバージョンのreadlineが必要であることがわかりました。私のgnuplotバイナリは正しいバージョンを参照していました。 otoolを使用して確認できます:

Gawkはlibreadline.7.dylibを参照します

$ otool -L /usr/local/bin/awk | grep -i read
    /usr/local/opt/readline/lib/libreadline.7.dylib (compatibility version 7.0.0, current version 7.0.0)

同じ問題が発生している場合は、gawkをアップグレードできるはずです。

$ brew upgrade gawk
==> Upgrading 1 outdated package:
gawk 4.2.0_1 -> 4.2.1_1
==> Upgrading gawk 
==> Downloading https://homebrew.bintray.com/bottles/gawk-4.2.1_1.mojave.bottle.
######################################################################## 100.0%
==> Pouring gawk-4.2.1_1.mojave.bottle.1.tar.gz
????  /usr/local/Cellar/gawk/4.2.1_1: 87 files, 4.7MB
Removing: /usr/local/Cellar/gawk/4.2.0_1... (69 files, 3MB)

$ otool -L /usr/local/bin/awk | grep -i read    
    /usr/local/opt/readline/lib/libreadline.8.dylib (compatibility version 8.0.0, current version 8.0.0)

ここに私がインストールしたgnuplotのバージョンがあります。

brew info gnuplot
gnuplot: stable 5.2.6 (bottled), HEAD
Command-driven, interactive function plotting
http://www.gnuplot.info/
/usr/local/Cellar/gnuplot/5.2.6_1 (48 files, 2.9MB) *

/ read/localに他のバイナリがあり、古いreadlineに依存している場合は、以下を使用してすばやく見つけることができます。

for i in /usr/local/bin/* ; do if otool -L $i | grep -i libreadline.7; then echo "\t^ used by $i\n"; fi; done

その後、それらをアップグレードする運があるかもしれません。

4
Aaron

tig をbrew経由でインストールすると、readlineがv.8にアップグレードされ、phpbrewで実行しているcomposerを使用しようとすると問題が発生しました。

  dyld: Library not loaded: /usr/local/opt/readline/lib/libreadline.7.dylib
  Referenced from: /Users/sheanhoxie/.phpbrew/php/php-7.3.11/bin/php
  Reason: image not found

Brew経由でreadline 7にダウングレードすると問題は解決しましたが、tigが無効になりました。

brew switch readline 7.0.3_1

ユーザー victor-duarte が示唆するように、readline 8を使用する場合、libreadline.8.0.dylibのシンボリックリンクをreadline dirに配置することで回避できるように見えました(readline 8に戻さなければならなかったことに注意してください)。

    brew switch readline 8.0.1
    cd /usr/local/opt/readline/lib
    ln -s libreadline.8.dylib libreadline.7.dylib
2
Shean Hoxie

psqlを使用しようとしているときにこの答えにつまずいた場合は、次のコマンドを実行する必要があります。

brew reinstall postgresql
0
user35581