首页 > 解决方案 > 构建和测试 SWIG,获取“强化程序中不允许的文件系统相对路径”

问题描述

我正在尝试在 macOS Catalina 10.15.7 上构建 swig。

在使用系统 perl 构建 swig 时,我最初得到“强化程序中不允许的文件系统相对路径”。我从源代码安装了我自己的 perl 版本,它似乎更进一步。我可以构建 swig,但我仍然收到一个错误:当我运行“make check”时,“强化程序中不允许文件系统相对路径”。

错误信息:

...
checking Examples/python/import_packages
Traceback (most recent call last):
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/runpy.py", line 174, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/runpy.py", line 72, in _run_code
    exec code in run_globals
  File "/Users/tom/PycharmProjects/SpeechRecognitionTest/swig-4.0.2/Examples/python/import_packages/same_modnames1/pkg2/foo.py", line 13, in <module>
    from . import _foo
ImportError: dlopen(pkg2/_foo.so, 2): no suitable image found.  Did find:
    file system relative paths not allowed in hardened programs
Traceback (most recent call last):
  File "runme.py", line 26, in <module>
    run_except_on_windows(commandline)
  File "runme.py", line 8, in run_except_on_windows
    subprocess.check_call(commandline, env=env, shell=True)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 190, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '/System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python -m pkg2.foo' returned non-zero exit status 1
make[4]: *** [python_run] Error 1
make[3]: *** [check] Error 2
make[2]: *** [check] Error 1
make[1]: *** [import_packages.actionexample] Error 2

我的目标是使用 python 3.9,而不是 python 2.7,但“make check”似乎是检查 python 2.7。我尝试使用 3.9 和 venv,并且“make check”在没有 () 的打印调用上失败,所以我假设测试套件只有 2.7。

从谷歌搜索来看,“强化程序中不允许的文件系统相对路径”似乎是由于一些新的 macOS 安全功能。转移到我自己的 perl 版本,并将 CPATH 设置为该版本减少了我得到的这些错误的数量。但我还有一个。

如果我不使用 python 2.7,我可以继续吗?有没有办法来解决这个问题?

我实际上只是在尝试构建使用 swig 的 PocketSphinx。

标签: macosswigmacos-catalinaconfigure

解决方案


推荐阅读