使用SDK10.6或10.7在OSX 10.7.5上构建Portaudio失败

时间:2012-11-09 14:26:14

标签: build compiler-errors osx-lion portaudio

我仍然无法在我的系统上构建Portaudio库,这是带有Xcode 4.3.2的OSX 10.7.5,安装了命令行工具并且在

下安装了SDK10.6和SDK10.7
    /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/

我很快(也是遇到同样问题的其他人)描述了我到目前为止所做的事情(遵循我在网上找到的不同解决方案)。

1)我从以下网站下载了“Portaudio”/ pa_stable_v19_20111121.tgz(最后稳定版):

  
    

www.portaudio.com/download.html

  

2)我在这里阅读了有关构建Portaudio的说明:

  
    

www.portaudio.com/docs/v19-doxydocs/compile_mac_coreaudio.html

  

并尝试使用建议的命令从终端窗口进行编译:

  
    

./ configure&&使

  

这导致(不是那么令人惊讶)以很多错误结束:

llvm-gcc-4.2:尝试执行'/usr/bin/../llvm-gcc-4.2/bin/powerpc-apple-darwin11-llvm-gcc-4.2'时出错:execvp:没有这样的文件或目录 lipo:无法打开输入文件:/var/folders/1_/xkp08ky561jg02zjjrpsxg940000gn/T//ccPxCTrJ.out(没有这样的文件或目录) make: * [src / hostapi / coreaudio / pa_mac_core.lo]错误1

这是因为自OSX 10.5以来不再支持“ppc”。此外,OSX 10.7上不存在“Developer”文件夹,并且Developer文件夹中的所有内容都已移至

   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/

3)我下载了一个补丁(mac_configure_patch.txt)以修复“configure”:

  
    

https://www.assembla.com/spaces/portaudio/tickets/216#/activity/ticket

  

并将其复制到portaudio目录并通过键入Terminal:

来应用它
  
    

$ patch< mac_configure_patch.txt

  

确认消息说:

  
    

修补文件configure.in

  

所以一切似乎都很好。但Portaudio仍在努力建立“ppc”。

4)现在我将ARCHFLAGS,CFLAGS,LDFLAGS设置为仅为体系结构i386构建如下(禁用通用构建):

  
    

$ MACOSX_DEPLOYMENT_TARGET =“10.7”ARCHFLAGS =“ - arch i386”CFLAGS =“ - O2 -g -Wall -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10。 7.sdk -arch i386 -mmacosx-version-min = 10.7“LDFLAGS =” - isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sd -arch i386 - mmacosx-version-min = 10.7“./configure --disable-mac-universal

  

5)我进一步发现:

  

A):“。include / pa_mac_core.h”中的“#include AudioToolbox.h”应该是UNCOMMENTED

     

B):应删除“Makefile”(不是Makefile.in)中的“-wError”。

符合: http://www.fluxforge.com/blog/building-portaudio-under-os-x-107-lion

6)现在我尝试构建(使用:“sudo make”),编译开始但是失败了:

  
    

ld:找不到框架CoreAudio

         

collect2:ld返回1退出状态

         

make: * [lib / libportaudio.la]错误1

  

7)所以我尝试使用“-F / System / Library / Frameworks -framework CoreAudio”指向框架

导致以下终端命令:

  
    

$ MACOSX_DEPLOYMENT_TARGET =“10.7”ARCHFLAGS =“ - arch i386”CFLAGS =“ - O2 -g -Wall -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10。 7.sdk -arch i386 -mmacosx-version-min = 10.7“LDFLAGS =” - isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sd -arch i386 - mmacosx-version-min = 10.7 -F / System / Library / Frameworks -framework CoreAudio“./configure --disable-mac-universal

  

似乎解决了CoreAudio框架问题但导致另一个错误说:

  
    

ld:找不到-lSystem的库

         

collect2:ld返回1退出状态

         

make: * [lib / libportaudio.la]错误1

  

我现在陷入困境。尝试使用SDK10.6或SDK10.7在OSX 10.7上构建Portaudio时,是否有人遇到过相同的问题。有没有人找到如何从终端构建Portaudio的解决方案? 我非常感谢任何提示! 提前谢谢!

3 个答案:

答案 0 :(得分:5)

试试最新的svn。如果这不起作用,你可能需要捣乱一些标志。

例如,在configure.in中:

  • 将-Werror更改为-Wall
  • 添加-Wno-deprecated(你不应该需要这个,但以防万一)

然后运行

./configure --disable-mac-universal

并像往常一样。

答案 1 :(得分:1)

好的,最后我解决了这个问题。希望解决方案也能帮助其他人。我只是忘了将CoreAudio框架的路径添加到CFLAGS。这是用于在OSX 10.7.5上使用SDK10.7构建架构i386&的构建portaudio的最终configure / build命令。 x86_64的:

在portaudio目录中打开一个终端窗口,然后输入:

  
    

MACOSX_DEPLOYMENT_TARGET =“10.7”ARCHFLAGS =“ - arch i386”CFLAGS =“ - O2 -g -Wall -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7 .sdk -arch i386 -mmacosx-version-min = 10.7 -F / System / Library / Frameworks -framework CoreAudio“LDFLAGS =” - isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs /MacOSX10.7.sdk -arch i386 -mmacosx-version-min = 10.7 -F / System / Library / Frameworks -framework CoreAudio“./configure --disable-mac-universal

  

如果完成此操作,则需要修改Makefile并将-Werror的提及更改为-Wall

然后:

  
    

  

瞧。在portaudio / lib目录中有“libportaudio.la”。您现在可以输入

  
    

sudo make install

  

(系统会要求您确认使用密码)

将库放在系统目录中。

最后你可以搞乱Portaudio! 玩得开心!

答案 2 :(得分:0)

在Mac OSX Mountain Lion(10.8)上尝试过你的说明,它在编译方面取得了很大进展,但后来失败了:

In file included from ./test/patest_sine_channelmaps.c:53:
./include/pa_mac_core.h:100:1: error: unknown type name 'AudioDeviceID'
AudioDeviceID PaMacCore_GetStreamInputDevice( PaStream* s );
^
./include/pa_mac_core.h:109:1: error: unknown type name 'AudioDeviceID'
AudioDeviceID PaMacCore_GetStreamOutputDevice( PaStream* s );
^
2 errors generated.
make: *** [bin/patest_sine_channelmaps] Error 1

然而,我发现你可以简单地使用Homebrew(类似于OSX的apt-like数据包管理器),它会像魅力那样做脏工作。在指定的安装目录中查找二进制文件和标头:)

$ brew install portaudio
Warning: It appears you have MacPorts or Fink installed.
Software installed with other package managers causes known problems for
Homebrew. If a formula fails to build, uninstall MacPorts/Fink and try again.
==> Downloading http://www.portaudio.com/archives/pa_stable_v19_20111121.tgz
######################################################################## 100.0%
==> Downloading patches
######################################################################## 100.0%
==> Patching
patching file include/pa_mac_core.h
==> ./configure --prefix=/usr/local/Cellar/portaudio/19.20111121 --enable-mac-un
==> make install
/usr/local/Cellar/portaudio/19.20111121: 8 files, 316K, built in 20 seconds