我正在尝试在Mac OS X上编译pulseaudio,但默认情况下我发现很多关于找不到inttypes.h
,errno.h
或stdio.h
等标准文件的错误。将-isystem/usr/include
放入CPPFLAGS
会修复这些错误,但稍后我会fatal error: 'CoreServices/CoreServices.h' file not found
。
我也试过添加-framework CoreServices
和/或
-I/System/Library/Frameworks/CoreServices.framework/Headers
但不起作用。
让编译器找到它的正确方法是什么? 我想我正在使用clang,gcc会产生更多错误。
答案 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!