从源代码编译R不会找到PCRE,即使已经安装了

qmelpv7a  于 2023-10-13  发布在  其他
关注(0)|答案(1)|浏览(70)

在macOS 13.4.1(Ventura)上,我试图从源代码编译R,但即使我安装了它,它也找不到pcre2.h

cd /tmp
export R_VERSION=4.2.3

curl -O https://cran.rstudio.com/src/base/R-4/R-${R_VERSION}.tar.gz
tar -xzvf R-${R_VERSION}.tar.gz
cd R-${R_VERSION}

./configure  --prefix=/opt/R/${R_VERSION} \
    --enable-R-shlib \
    --enable-memory-profiling
R is now configured for aarch64-apple-darwin22.5.0

  Source directory:            .
  Installation directory:      /opt/R/4.2.3

  C compiler:                  gcc  -g -O2
  Fortran fixed-form compiler: gfortran -fno-optimize-sibling-calls -g -O2

  Default C++ compiler:        g++ -std=gnu++14  -g -O2
  C++11 compiler:              g++ -std=gnu++11  -g -O2
  C++14 compiler:              g++ -std=gnu++14  -g -O2
  C++17 compiler:              g++ -std=gnu++17  -g -O2
  C++20 compiler:              g++ -std=gnu++20  -g -O2
  Fortran free-form compiler:  gfortran -fno-optimize-sibling-calls -g -O2
  Obj-C compiler:              gcc -g -O2 -fobjc-exceptions

  Interfaces supported:        X11, aqua, tcltk
  External libraries:          pcre2, readline, curl
  Additional capabilities:     NLS, ICU
  Options enabled:             shared R library, shared BLAS, R profiling, memory profiling

  Capabilities skipped:        PNG, JPEG, TIFF, cairo
  Options not enabled:         

  Recommended packages:        yes

然后

sudo make

失败原因:

grep.c:73:10: fatal error: 'pcre2.h' file not found
# include<pcre2.h>
         ^~~~~~~~~
1 error generated.
make[3]: *** [grep.o] Error 1
make[2]: *** [R] Error 2
make[1]: *** [R] Error 1
make: *** [R] Error 1

pcre2已安装,使用自制软件:

brew install pcre2
Warning: pcre2 10.42 is already installed and up-to-date.
To reinstall 10.42, run:
  brew reinstall pcre2

我可以在这里找到pcre2.h

ls /opt/homebrew/include | grep pcre
pcre2.h
pcre2posix.h

如何告诉R对pcre2.h使用/opt/homebrew/include?

zbsbpyhn

zbsbpyhn1#

如果你看一下这个文件,它周围有几个#define语句:

#ifdef HAVE_PCRE2
  /* PCRE2_CODE_UNIT_WIDTH is defined to 8 via config.h */
# include<pcre2.h>
#else
  /*
  Some systems might have pcre headers in a subdirectory -- not seen recently.
  */
# ifdef HAVE_PCRE_PCRE_H
#  include <pcre/pcre.h>
# else
#  include <pcre.h>
# endif
#endif

而pcre是有趣的,因为有较新的pcre 2和较旧的(!!)pcre 3.我建议你a)检查configure产生了什么,特别是在config.h中。也许b)检查当前的源代码版本4.3.1以及当前的开发版本。最后,Kurt在使用autoconfm4方面非常熟练,因此您可以跟踪检测代码。
值得一提的是,在我负责Debian的R版本的25年多时间里(加上一些最初帮助当时的维护者),我没有遇到过问题。
PS还要注意,./configure有两个标志为pcre你可以考虑。最坏的情况下,你可以关闭pcre2

--with-pcre2            use PCRE2 library (if available) [yes] 
  --with-pcre1            use PCRE1 library (if available and PCRE2 is not)
                          [yes]

其中pcre1可能是古老的。

相关问题