TL;DR :
Даже если libffi
кажется установленным, скрипт configure
не находит его, даже если я даю ему (правильный?) префикс.
/!\ В последней части (*) этого поста я застрял. /!\
Я помещаю другую информацию только для того, чтобы объяснить, как я туда попал. Я прошу прощения за большой пост, если что-то покажется вам неактуальным, не стесняйтесь сказать мне, я рассмотрю возможность сделать свой пост короче.
Почему я хочу скомпилировать CLISP самостоятельно:
У меня есть программа на lisp, которую я хотел бы запустить, но при ее запуске с CLISP
, установленным с brew
(у меня нет root-доступа), я получаю следующую ошибку:
*** - CFFI requires CLISP compiled with dynamic FFI support.
Поэтому я хотел бы скомпилировать CLISP самостоятельно.
До сих пор я использовал SBCL, но у меня было проблема и искал другую реализацию.
Проблемы, которые у меня возникают при попытке скомпилировать:
Я скачал исходники, разархивировал их.
Затем я пытаюсь запустить ./configure
.
Но я получаю это:
Configure findings:
FFI: no (user requested: default)
readline: no (user requested: default)
libsigsegv: no, consider installing GNU libsigsegv
./configure: libsigsegv was not detected, thus some features, such as
generational garbage collection and
stack overflow detection in interpreted Lisp code
cannot be provided.
Please install libsigsegv like this:
mkdir tools; cd tools; prefix=`pwd`/x86_64-apple-darwin15.4.0
wget http://ftp.gnu.org/pub/gnu/libsigsegv/libsigsegv-2.8.tar.gz
tar xfz libsigsegv-2.8.tar.gz
cd libsigsegv-2.8
./configure --prefix=${prefix} && make && make check && make install
cd ../..
rm -f src/config.cache
./configure --with-libsigsegv-prefix=${prefix}
If you insist on building without libsigsegv, please pass
--ignore-absence-of-libsigsegv
to this script:
./configure --ignore-absence-of-libsigsegv
If you have installed libsigsegv, but clisp does not detect it,
you might have installed it incorrectly, see section 2 in in unix/INSTALL.
ВАЖНЫЙ :
libffi
и libsigsegv
устанавливаются вместе с homebrew. Но не найдены. Я попытался добавить --with-libsigsegv-prefix=<several values amongst ~/.brew/{opt,opt/libsigsegv,lib,Cellar/libsigsegv,...}
: все та же проблема.
Это также почти то же самое, что и это сообщение или этот . Но проверенные решения у меня не работают (OSX без root-доступа).
При запуске configure с --with-dynamic-ffi
и --ignore-absence-of-libsigsegv
:
Я попытался запустить ./configure --ignore-absence-of-libsigsegv
и добавил --with-dynamic-ffi
, как кто-то предложил мне в комментариях.
Но потом я получил это:
Configure findings:
FFI: no (user requested: default)
readline: no (user requested: default)
libsigsegv: no, consider installing GNU libsigsegv
As you requested, we will proceed without libsigsegv...
./makemake --with-dynamic-ffi > Makefile
clang: error: unsupported option '-print-multi-os-directory'
clang: error: no input files
при попытке вручную установить libffi
и libsigsegv
:
Я также попробовал вариант из первого сообщения об ошибке:
При запуске ./configure --with-libsigsegv-prefix=${prefix}
я получил:
Configure findings:
FFI: no (user requested: default)
readline: no (user requested: default)
libsigsegv: yes
./makemake --with-libsigsegv-prefix=/nfs/2013/v/vmonteco/Documents/clisp-2.49/tools/x86_64-apple-darwin15.4.0 > Makefile
clang: error: unsupported option '-print-multi-os-directory'
clang: error: no input files
make: `config.lisp' is up to date.
даже если я добавлю --with-dynamic-ffi
или попытаюсь установить libffi
вручную, как предлагалось в первом сообщении об ошибке (а также добавлю --with-ffi-prefix=${prefix}
)
Если я попытаюсь вручную собрать и установить libffcall
, а также:
я получаю много
avcall-i386.s:7:2: error: instruction requires: Not 64-bit mode
при работе make
(*) Итак, теперь он находит libsigsegv
, но не находит libffi
.
Тем не менее, дерево в ${prefix}
выглядит так:
.
├── include
│ └── sigsegv.h
├── lib
│ ├── libffi-3.2.1
│ │ └── include
│ │ ├── ffi.h
│ │ └── ffitarget.h
│ ├── libffi.6.dylib
│ ├── libffi.a
│ ├── libffi.dylib -> libffi.6.dylib
│ ├── libffi.la
│ ├── libsigsegv.a
│ ├── libsigsegv.la
│ └── pkgconfig
│ └── libffi.pc
└── share
├── info
│ ├── dir
│ └── libffi.info
└── man
└── man3
├── ffi.3
├── ffi_call.3
├── ffi_prep_cif.3
└── ffi_prep_cif_var.3
У меня нет идей.