Help us understand the problem. What is going on with this article?

Mojave で Fink によるビルドで readline8 に対処した例

More than 1 year has passed since last update.

Fink では、すべてのリンクを確認してパッケージを作成しています

Fink は、複数バージョンの併用が可能です。たとえば、readline6 にリンクしてビルドしたい場合、一時的に readline7 のヘッダファイルを削除し、readline6 のヘッダファイルをインクルードしてビルドします。

Fink の R (r-base35-3.5.3-1) に、ビルド時のエラーが報告された。

making gramLatex.d from gramLatex.c
flag-sort -r gcc -ffor-scope -I"../../../../include" -DNDEBUG -I../../../include -I../../../../src/include -DHAVE_CONFIG_H -I../../../../src/main  -I/sw64/include   -fPIC  -g -O3  -c text.c -o text.o
flag-sort -r gcc -ffor-scope -I"../../../../include" -DNDEBUG -I../../../include -I../../../../src/include -DHAVE_CONFIG_H -I../../../../src/main  -I/sw64/include   -fPIC  -g -O3  -c init.c -o init.o
making gramRd.d from gramRd.c
flag-sort -r gcc -ffor-scope -I"../../../../include" -DNDEBUG -I../../../include -I../../../../src/include -DHAVE_CONFIG_H -I../../../../src/main  -I/sw64/include   -fPIC  -g -O3  -c Rmd5.c -o Rmd5.o
flag-sort -r gcc -ffor-scope -I"../../../../include" -DNDEBUG -I../../../include -I../../../../src/include -DHAVE_CONFIG_H -I../../../../src/main  -I/sw64/include   -fPIC  -g -O3  -c md5.c -o md5.o
flag-sort -r gcc -ffor-scope -I"../../../../include" -DNDEBUG -I../../../include -I../../../../src/include -DHAVE_CONFIG_H -I../../../../src/main  -I/sw64/include   -fPIC  -g -O3  -c signals.c -o signals.o
flag-sort -r gcc -ffor-scope -I"../../../../include" -DNDEBUG -I../../../include -I../../../../src/include -DHAVE_CONFIG_H -I../../../../src/main  -I/sw64/include   -fPIC  -g -O3  -c install.c -o install.o
flag-sort -r gcc -ffor-scope -I"../../../../include" -DNDEBUG -I../../../include -I../../../../src/include -DHAVE_CONFIG_H -I../../../../src/main  -I/sw64/include   -fPIC  -g -O3  -c getfmts.c -o getfmts.o
flag-sort -r gcc -ffor-scope -I"../../../../include" -DNDEBUG -I../../../include -I../../../../src/include -DHAVE_CONFIG_H -I../../../../src/main  -I/sw64/include   -fPIC  -g -O3  -c http.c -o http.o
flag-sort -r gcc -ffor-scope -I"../../../../include" -DNDEBUG -I../../../include -I../../../../src/include -DHAVE_CONFIG_H -I../../../../src/main  -I/sw64/include   -fPIC  -g -O3  -c gramLatex.c -o gramLatex.o
flag-sort -r gcc -ffor-scope -I"../../../../include" -DNDEBUG -I../../../include -I../../../../src/include -DHAVE_CONFIG_H -I../../../../src/main  -I/sw64/include   -fPIC  -g -O3  -c gramRd.c -o gramRd.o
flag-sort -r gcc -ffor-scope -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -single_module -multiply_defined suppress ../../../../lib/libR.dylib -L/sw64/lib -o text.o init.o Rmd5.o md5.o signals.o install.o getfmts.o http.o gramLatex.o gramRd.o ../../../../lib/libR.dylib -lintl -Wl,-framework -Wl,CoreFoundation
mkdir ../../../../library/tools/libs
installing 'sysdata.rda'
dyld: Symbol not found: _rl_done
  Referenced from: /sw64/src/
  Expected in: flat namespace
 in /sw64/src/
/bin/sh: line 1: 26893 Done                    echo "tools:::sysdata2LazyLoadDB(\"./R/sysdata.rda\",\"../../../library/tools/R\")"
     26894 Abort trap: 6           | R_DEFAULT_PACKAGES=NULL LC_ALL=C R_ENABLE_JIT=0 TZ=UTC ../../../bin/R --vanilla --slave
make[4]: *** [sysdata] Error 134

エラーは、 _rl_done というシンボルがないというもので、見ているライブラリは libR.dylib。

$ cd /sw/src/
$ grep -r readline *

tools というライブラリ自体は readline を使っていない。

R の configure では、readline を自動的に探す。この際、パス指定などはできない。このことから、readline が適切にリンクされていない可能性がある。そこで、readline8 を /usr/local にインストールしてみる。

$ cd ~/Download
$ curl -O
$ tar -zxvf readline-8.0.tar.gz
$ cd readline-8.0
$ ./configure
$ make
$ sudo make install
$ ls /usr/local/lib/

readline8 がインストールされている。

では、あらためて r-base35 をビルドしてみる。たしかに、同じエラーが出た。

$ otool -L /sw/src/
    libR.dylib (compatibility version 3.5.0, current version 3.5.3)
    /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate (compatibility version 1.0.0, current version 4.0.0)
    /sw/lib/gcc5/lib/libgfortran.3.dylib (compatibility version 4.0.0, current version 4.0.0)
    /sw/lib/gcc5/lib/libquadmath.0.dylib (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.60.2)
    /sw/lib/libintl.8.dylib (compatibility version 10.0.0, current version 10.5.0)
    /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 1349.95.0)
    /usr/lib/libedit.3.dylib (compatibility version 2.0.0, current version 3.0.0)
    /sw/lib/libpcre2-8.0.dylib (compatibility version 8.0.0, current version 8.1.0)
    /usr/lib/libpcre.0.dylib (compatibility version 1.0.0, current version 1.1.0)
    /sw/lib/liblzma.5.dylib (compatibility version 8.0.0, current version 8.3.0)
    /sw/lib/libbz2.1.dylib (compatibility version 1.0.1, current version 1.0.6)
    /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.8)
    /sw/lib/libiconv.2.dylib (compatibility version 9.0.0, current version 9.0.0)
    /sw/lib/libicuuc.55.1.dylib (compatibility version 55.0.0, current version 55.1.0)
    /sw/lib/libicui18n.55.1.dylib (compatibility version 55.0.0, current version 55.1.0)

readline は、pcre2 の上あたりにあるはずだが、リンクされていない。

Fink では、リンクが適切にされるよう、フラグの並び方を調整している。この flag-sort が、Mojave の SDK を認識していなかったことが原因であった。

Fink 本体の開発者が、flag-sort の修正をして対応した。

現状、r-base35 は readline6 にリンクしています。 Fink には、 readline7 があるので、問題がなければ今後は readline7 に移行します。

今後、Mojave ユーザの方が /usr/local に readline8 などを入れいても、Fink でインストールするものは Fink の readline に適切にリンクされます

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away