iOS 上的 libsndfile

Posted

技术标签:

【中文标题】iOS 上的 libsndfile【英文标题】:libsndfile on iOS 【发布时间】:2011-10-20 06:48:41 【问题描述】:

现在我尝试在ios 上使用libsndfile 时遇到了一个奇怪的链接问题:

我在MACOSX 10.6.8 上编译了libsndfile,它通过了所有检查。但是当我将它添加到 Xcode 并尝试在 iOS 上编译它时,我收到了这些链接警告和错误:

ld: warning: in /Users/chencyz/Desktop/Development/SDK/libsndfile/lib/libsndfile.a, file was built for unsupported file format which is not the architecture being linked (i386)
Undefined symbols:
  "_sf_close", referenced from:
      SndfileHandle::SNDFILE_ref::~SNDFILE_ref()in AudioReader.o
  "_sf_error", referenced from:
      SndfileHandle::error() const in AudioReader.o
  "_sf_open", referenced from:
      SndfileHandle::SndfileHandle(char const*, int, int, int, int)in AudioReader.o
  "_sf_read_float", referenced from:
      SndfileHandle::read(float*, long long)in AudioReader.o
ld: symbol(s) not found

AudioReader只是一个使用libsndfile的程序API的简单类。

有人知道吗?

【问题讨论】:

【参考方案1】:

您似乎没有为 iOS 重新编译该库,您似乎正在尝试链接该库的 i386 版本。您粘贴的错误消息中的第一行非常清楚。

iOS 在 ARM 处理器上运行,因此您需要为 ARM 构建库。

【讨论】:

谢谢 :) 现在我将libsndfile编译成i386版本,链接问题消失了,但是还有一个问题: 由于 libsndfile 依赖于 libogg、libvorbis 和 libflac,所以我必须在编译 libsndfile 之前将它们全部编译,但是当我全部编译它们时,我发现 libsndfile.a 不包含 libogg。 a,libvorbis.a(and other)和libflac.a,所以如果我想在项目中使用libsndfile,我必须把它们都添加进去...... 这个我不太确定,你知道吗? 听起来你的 Makefile 或项目文件有问题。另请注意,您说您为 i386 构建,这是不正确的,iOS 可执行文件是为 ARM 处理器构建的。 现在我只能将库构建成 i386 版本,但是当我尝试将库构建成 armv6 版本时,我遇到了很多问题......比如缺少一些 C 基础头文件......跨度>

以上是关于iOS 上的 libsndfile的主要内容,如果未能解决你的问题,请参考以下文章

iOS - iOS 上的以下 LAContext 错误日志是啥意思?

iOS 6 上的allowAirPlayVideo 属性

iOS 14 上的 UICollectionView 列表布局问题

iOS 14 上的 NSNumberFormatter 错误

iOS 13 上的 AVAssetReferenceRestrictions

iOS13 上的 UISearchController 崩溃