使用CoreServices.h在Mac OS X上编译pulseaudio

时间:2012-08-11 07:16:35

标签: macos llvm clang pulseaudio

我正在尝试在Mac OS X上编译pulseaudio,但默认情况下我发现很多关于找不到inttypes.herrno.hstdio.h等标准文件的错误。将-isystem/usr/include放入CPPFLAGS会修复这些错误,但稍后我会fatal error: 'CoreServices/CoreServices.h' file not found

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

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

1 个答案:

答案 0 :(得分: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最低兼容性,因为10.8 SDK中缺少了PulseAudio引用的头文件。

您可以将配置选项传递给autogen.sh,一旦autoconf完成,它将运行configure。您可以尝试在主分支上测试的以下命令:

./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宏错误,请将aclocal中的m4宏复制到m4子目录中,然后重试。

还有一些其他问题,但这些问题必须尽快解决。在这里添加它可能有助于某人试图建立它。

错误:无法找到Multiprocessing.h: 这在10.7中已被弃用,但标题仍包含在CoreServices中,并且只会更改文件src/pulsecore/semaphore-osx.c中的include指令。

-#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:没有这样的文件或目录 由于某种原因,编译器不考虑默认包含dir,您可以添加src/Makefile查找的路径并设置变量GDBM_CFLAGS

GDBM_CFLAGS=-I/usr/local/include

的nJoy!