2

我正在尝试在 Mac OS X 上编译 pulseaudio,但是默认情况下,我会收到很多关于找不到标准文件的错误,例如inttypes.h,errno.hstdio.h. 修复这些错误-isystem/usr/includeCPPFLAGS但后来我得到fatal error: 'CoreServices/CoreServices.h' file not found.

我也尝试过添加-framework CoreServices和/或 -I/System/Library/Frameworks/CoreServices.framework/Headers但都不起作用。

让编译器找到它的正确方法是什么?我想我正在使用 clang,gcc 会产生更多错误。

4

1 回答 1

1

您走在正确的轨道上,这些是框架和包含标志,但是如果您使用正确的配置选项,您会发现甚至系统包含也被正确拾取。

Makefile 将尝试根据--with-mac-sysroot--with-mac-version-min属性适当地设置框架。

用于指定 SDK 位置的示例配置选项:

--with-mac-sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk/ 
--with-mac-version-min=10.7

如果您在 Mountain lion (10.8) 上构建,您仍然需要使用 10.7 最低兼容性,因为 PulseAudio 引用的 10.8 SDK 中缺少标头。

您可以将配置选项传递给autogen.sh将在configureautoconf 完成后运行的选项。您可以尝试以下已在 master 分支上测试过的命令:

./autogen.sh --prefix=/usr/local --disable-jack --disable-hal --disable-bluez --disable-avahi --with-mac-sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk/ --with-mac-version-min=10.7 --disable-dbus

如果遇到 m4 宏错误,请将 m4 宏从 aclocal 复制到 m4 子目录中,然后重试。

还有一些其他问题,但这些问题必将得到解决,可能很快就会过时。在此处添加它,因为它可能会帮助尝试构建它的人。

错误:找不到 Multiprocessing.h: 这已在 10.7 中被弃用,但标头仍包含在 CoreServices 中,并且将构建只需更改文件中的包含指令src/pulsecore/semaphore-osx.c

-#include <Multiprocessing.h>
+#include <CoreServices/CoreServices.h>

错误:'lt_ PROGRAM _LTX_preloaded_symbols' 未声明。 这可能是编译的问题src/daemon/dumpmodules.c,可以通过声明外部宏来解决。

extern const lt_dlsymlist lt_preloaded_symbols[];

错误:gdbm.h:没有这样的文件或目录 由于某种原因,编译器不考虑默认包含目录,您可以将路径添加到src/Makefile查找并设置变量GDBM_CFLAGS

GDBM_CFLAGS=-I/usr/local/include

开心!

于 2013-03-03T23:56:49.990 回答