尝试安装JSON :: XS或YAML :: XS之类的Perl模块时,我收到相同的错误:


XS.xs:1:10:致命错误:找不到“ EXTERN.h”文件


我使用MacBook,xCode是最新的,其他所有可以帮助的也是最新的。

请发送帮助。

最佳答案

从OS X El Capitan开始,Apple引入了System Integrity Protection,它限制了对/ usr / lib / usr / bin以及其他与操作系统捆绑在一起的Perl的安装所使用的敏感目录(甚至是root或sudo用户)的写入。在安装新模块以及尝试安装XS模块(链接到外部C库的模块)时,这可能会导致问题。

因此,您不应将默认的Perl安装视为可以正常工作的开发环境,尤其是在安装自定义模块时。

查看this thread on PM和其他。自从El-Capitan设法通过从tarball手动构建并添加一些参数或环境变量来设置路径来解决此问题以来,我认为最好保留使用Perl系统,但这不是走的路。这使您的环境难以构建,但又脆弱且对OS更新敏感,后者可能以许多不同的方式破坏事物。

最佳实践似乎是从使用brew install perl的Perl开始并在此环境中工作,并记住要按照安装程序的指示设置bash_profile。

还值得记住做一个brew link perl。如果您收到有关这种破坏的警告,那么看上去好像系统的Perl库就不用担心了-这些很可能是您在顶部安装的模块,通过它们进行链接的麻烦较少。如果您有疑问,请记下将清除哪些模块安装,并在配置了环境后重新安装它们(即,使用cpanm配置模块安装程序方法或使用旧的perl -MCPAN -e shell等)

brew的这种新Perl设置消除了继续运行sudo的需要,而sudo增加了另一层可能会出错的事情,因为环境变量不会继续执行,并且权限冲突会出现。

最后,为了简化程序包/模块的安装,我建议您执行brew install cpanminus。如果您以前已经安装过此软件,则可以通过执行brew reinstall cpanminus来确保配置了路径等。

如果您想更进一步,那么您也可以安装perlbrew,这将使您能够以用户身份运行多个版本的Perl,并使用自己的库和模块来配置这些版本,这非常有用,尤其是在与您的版本保持一致的情况下。测试的生产环境等

如果从系统Perl转移到这种方法,您可能会遇到的一个问题是需要处理使用sudo安装东西带来的任何困扰。值得花一点时间来正确设置所有这些设置,并且您所遇到的问题将大大减少,您不会再有that琐的感觉,即您不想更改任何东西,因为担心一切都会破裂。

我也遇到了Perl Blog Article that suggests a fix for XS issues with perlbrew on Mojave

Gist描述了更新cpan shell安装根目录的过程,尽管除非执行上述步骤后cpan停留在旧配置中,否则这不是必需的。

我在PerlMonks上也提出了新问题

10-08 07:58
查看更多