在 OSX 中编译 YAP prolog 时找不到 libarchive

在 OSX 中编译 YAP prolog 时找不到 libarchive

我正在尝试在 OSX (Mountain Lion) 中编译 Yap Prolog 的最新开发版本。我第一次尝试时看到了这条消息:

##################################################################
# ERROR: Could not find library archive (-larchive).  Dropped
# library(archive). Library archive is available from
# http://code.google.com/p/libarchive/
#
# Most Unix/Linux distributions are shipped with binaries.  Make
# sure to have the development library installed.  E.g.
#
#   Debian/Ubuntu/Mint: aptitude install libarchive-dev
#   Fedora/...      yum install libarchive-devel
#   MacOS (Macports):   port install libarchive
##################################################################

所以我按照建议使用 mac 端口安装了 libarchive sudo port install libarchive。安装成功。

但是再次编译后一直提示libarchive丢失。我尝试在系统中查找 libarchive 文件,并发现一个/opt/local/lib/libarchive.dylib指向/opt/local/lib/libarchive.2.dylib.以防万一我将环境变量设置DYLD_LIBRARY_PATH/opt/local/lib但问题仍然存在。

有人知道我该如何解决这个问题吗?

答案1

-devel 包通常包含头文件、pkgconfig 数据和类似的文件 - 任何需要的东西关联针对相关图书馆的申请。我不确定端口如何工作,但检查/opt/local(或/opt/local/include)archive.harchive_entry.h。如果没有这些文件,您将无法编译应用程序。由于路径听起来相当不标准(/opt/local/...),您可能需要告诉构建系统,即应该在该特定目录中查找库和头文件。

如今,类 UNIX 系统上文件的基本通用布局由文件系统层次结构标准。最重要的部分如下:

PREFIX
|-- bin
|-- etc
|-- include
|-- lib
|-- sbin
`-- share
  • binsbin保存二进制文件(您运行的程序) - 这就是为什么这些目录通常在$PATHshell 变量中提到的原因。 ins用来sbin代表静止的就像静态链接的二进制文件一样,它不需要任何动态链接,并且基本上可以“按原样”运行。

  • lib(和/或lib64什至lib32)保存共享(也可能是静态)库

  • include包含头文件,可以将代码链接到库(基本上是 API 定义)。

  • etcshare用于配置和附加数据文件。

  • PREFIX通常是/usr, /usr/local,/opt/opt/<something>但您也可以在您的主目录中创建这样的结构。

如何告诉构建系统在哪里查找二进制文件取决于代码使用的 bs。通常这种类型的信息被放置在源代码附带的README或文件中。例如,对于 GNU 自动工具,它通常采用或传递给脚本的参数INSTALL的形式。如果这不可用,您可能需要显式导出编译器和链接器使用的变量:--with-name=PREFIX--with-name-lib=PREFIX/lib --with-name-include=PREFIX/includeconfigure

$ export CFLAGS="-IPREFIX/include $CFLAGS"
$ export LDFLAGS="-LPREFIX/lib $LDFLAGS"

在你的情况下,这将分别是-I/opt/local/include-L/opt/local/lib

相关内容