我正在尝试在 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.h
和archive_entry.h
。如果没有这些文件,您将无法编译应用程序。由于路径听起来相当不标准(/opt/local/...
),您可能需要告诉构建系统,即应该在该特定目录中查找库和头文件。
如今,类 UNIX 系统上文件的基本通用布局由文件系统层次结构标准。最重要的部分如下:
PREFIX
|-- bin
|-- etc
|-- include
|-- lib
|-- sbin
`-- share
bin
并sbin
保存二进制文件(您运行的程序) - 这就是为什么这些目录通常在$PATH
shell 变量中提到的原因。 ins
用来sbin
代表静止的就像静态链接的二进制文件一样,它不需要任何动态链接,并且基本上可以“按原样”运行。lib
(和/或lib64
什至lib32
)保存共享(也可能是静态)库include
包含头文件,可以将代码链接到库(基本上是 API 定义)。etc
和share
用于配置和附加数据文件。PREFIX
通常是/usr
,/usr/local
,/opt
或/opt/<something>
但您也可以在您的主目录中创建这样的结构。
如何告诉构建系统在哪里查找二进制文件取决于代码使用的 bs。通常这种类型的信息被放置在源代码附带的README
或文件中。例如,对于 GNU 自动工具,它通常采用或传递给脚本的参数INSTALL
的形式。如果这不可用,您可能需要显式导出编译器和链接器使用的变量:--with-name=PREFIX
--with-name-lib=PREFIX/lib --with-name-include=PREFIX/include
configure
$ export CFLAGS="-IPREFIX/include $CFLAGS"
$ export LDFLAGS="-LPREFIX/lib $LDFLAGS"
在你的情况下,这将分别是-I/opt/local/include
和-L/opt/local/lib
。