【问题标题】:Adding libraries to a project in xcode - symbols not found在 xcode 中将库添加到项目中 - 找不到符号
【发布时间】:2010-06-01 11:55:10
【问题描述】:

我正在尝试在 xcode 中制作一个使用 pjsip 的 iphone 应用程序。问题是我不知道如何链接库。这是我第一次使用其他库,所以可能我做错了什么,我只是不知道是什么。 :(

我在 mac os x 的这个文件夹中有 ARM 版本的库。 /Users/kudorgyozo/pjsip_iphone

在 Xcode 中: 我已经指定了这样的库和标题搜索路径:

包括:

/Users/kudorgyozo/pjsip_iphone/pjlib/include /Users/kudorgyozo/pjsip_iphone/pjlib-util/include /Users/kudorgyozo/pjsip_iphone/pjmedia/include /Users/kudorgyozo/pjsip_iphone/pjnath/include /Users/kudorgyozo/ pjsip_iphone/pjsip/include

对于图书馆:

/Users/kudorgyozo/pjsip_iphone/pjlib/lib /Users/kudorgyozo/pjsip_iphone/pjlib-util/lib /Users/kudorgyozo/pjsip_iphone/pjmedia/lib /Users/kudorgyozo/pjsip_iphone/pjnath/lib /Users/kudorgyozo/ pjsip_iphone/pjsip/lib

然后使用“其他链接器标志”:

-lpj-arm-apple-darwin9 -lpjlib-util-arm-apple-darwin9 -lpjmedia-arm-apple-darwin9 -lpjmedia-audiodev-arm-apple-darwin9 -lpjmedia-codec-arm-apple-darwin9 - lpjsdp-arm-apple-darwin9 -lpjnath-arm-apple-darwin9 -lpjsip-arm-apple-darwin9 -lpjsip-simple-arm-apple-darwin9 -lpjsip-ua-arm-apple-darwin9 -lpjsua-arm-apple-达尔文9

这样可以吗?因为它给了我符号未找到的错误。我认为从“包含”库中找不到符号。我不知道出了什么问题,我刚刚开始了解如何在基于 linux 的系统下构建应用程序,我之前只使用 C# 进行过编程。

编辑:这是缺少的符号列表:

“_AudioSessionSetProperty”,引用自: libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)中的_create_audio_unit libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o) 中的 _ca_stream_set_cap libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o) 中的 _ca_stream_set_cap “_srtp_deinit”,引用自: libpjmedia-arm-apple-darwin9.a(transport_srtp.o) 中的 _pjmedia_srtp_deinit_lib “_gsm_encode”,引用自: libpjmedia-codec-arm-apple-darwin9.a(gsm.o) 中的 _gsm_codec_encode “_AudioComponentInstanceNew”,引用自: libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)中的_create_audio_unit “_AudioSessionAddPropertyListener”,引用自: libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o) 中的 _ca_stream_start “_speex_decoder_init”,引用自: libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _spx_codec_open “_res_Resample”,引用自: libpjmedia-arm-apple-darwin9.a(resample_resample.o) 中的 _pjmedia_resample_run libpjmedia-arm-apple-darwin9.a(resample_resample.o) 中的 _pjmedia_resample_run “_speex_bits_write”,引用自: libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _spx_codec_encode “_gsm_destroy”,引用自: libpjmedia-codec-arm-apple-darwin9.a(gsm.o) 中的 _gsm_codec_close libpjmedia-codec-arm-apple-darwin9.a(gsm.o) 中的 _gsm_codec_close “_AudioComponentInstanceDispose”,引用自: libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o) 中的 _propListener libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o) 中的 _ca_stream_destroy “_AudioSessionGetProperty”,引用自: libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o) 中的 _ca_stream_get_cap libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o) 中的 _ca_stream_get_cap libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o) 中的 _ca_stream_get_cap libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o) 中的 _ca_stream_get_cap libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o) 中的 _ca_stream_get_cap libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o) 中的 _ca_stream_get_cap libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o) 中的 _ca_stream_get_cap “_AudioComponentFindNext”,引用自: libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o) 中的 _ca_stream_set_cap libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o) 中的 _ca_factory_init “_speex_encoder_ctl”,引用自: libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _get_speex_info libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _get_speex_info libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _get_speex_info libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _get_speex_info libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _get_speex_info libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _get_speex_info libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _get_speex_info libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _get_speex_info libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _spx_codec_modify libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _spx_codec_modify libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _spx_codec_open libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _spx_codec_open libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _spx_codec_open libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _spx_codec_open libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _spx_codec_open “_speex_encoder_init”,引用自: libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _get_speex_info libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _spx_codec_open “_AudioSessionSetActive”,引用自: libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o) 中的 _ca_stream_stop libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o) 中的 _ca_stream_start “_AudioUnitRender”,引用自: libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o) 中的 _input_callback “_srtp_dealloc”,引用自: libpjmedia-arm-apple-darwin9.a(transport_srtp.o) 中的 _pjmedia_transport_srtp_stop libpjmedia-arm-apple-darwin9.a(transport_srtp.o) 中的 _pjmedia_transport_srtp_stop _pjmedia_transport_srtp_start 在 libpjmedia-arm-apple-darwin9.a(transport_srtp.o) “_speex_lib_get_mode”,引用自: libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _pjmedia_codec_speex_init libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _pjmedia_codec_speex_init “_res_SrcLinear”,引用自: libpjmedia-arm-apple-darwin9.a(resample_resample.o) 中的 _pjmedia_resample_run libpjmedia-arm-apple-darwin9.a(resample_resample.o) 中的 _pjmedia_resample_run “_srtp_init”,引用自: libpjmedia-arm-apple-darwin9.a(transport_srtp.o) 中的 _pjmedia_srtp_init_lib “_speex_bits_init”,引用自: libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _spx_codec_open libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _spx_codec_open “_AudioUnitSetProperty”,引用自: libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)中的_create_audio_unit libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)中的_create_audio_unit libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)中的_create_audio_unit libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)中的_create_audio_unit libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)中的_create_audio_unit libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)中的_create_audio_unit libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)中的_create_audio_unit “_AudioUnitUninitialize”,引用自: libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o) 中的 _propListener libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o) 中的 _ca_stream_destroy “_speex_decoder_destroy”,引用自: libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _spx_codec_close “_AudioUnitInitialize”,引用自: libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)中的_create_audio_unit “_speex_bits_reset”,引用自: libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _spx_codec_encode “_AudioOutputUnitStop”,引用自: libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o) 中的 _ca_stream_stop libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o) 中的 _ca_stream_stop libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o) 中的 _ca_stream_start libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o) 中的 _interruptionListener “_srtp_protect_rtcp”,引用自: libpjmedia-arm-apple-darwin9.a(transport_srtp.o) 中的 _transport_send_rtcp2 “_speex_decode_int”,引用自: libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _spx_codec_recover libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _spx_codec_decode “_speex_encoder_destroy”,引用自: libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _get_speex_info libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _spx_codec_close “_gsm_create”,引用自: libpjmedia-codec-arm-apple-darwin9.a(gsm.o) 中的 _gsm_codec_open libpjmedia-codec-arm-apple-darwin9.a(gsm.o) 中的 _gsm_codec_open “_crypto_get_random”,引用自: libpjmedia-arm-apple-darwin9.a(transport_srtp.o) 中的 _generate_crypto_attr_value “_speex_bits_unpack_unsigned”,引用自: libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _speex_get_next_frame libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _speex_get_next_frame libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _speex_get_next_frame libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _speex_get_next_frame libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _speex_get_next_frame “_speex_encode_int”,引用自: libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _spx_codec_encode “_octet_string_hex_string”,引用自: _pjmedia_transport_srtp_start 在 libpjmedia-arm-apple-darwin9.a(transport_srtp.o) _pjmedia_transport_srtp_start 在 libpjmedia-arm-apple-darwin9.a(transport_srtp.o) “_AudioSessionInitialize”,引用自: libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o) 中的 _ca_factory_init “_speex_bits_read_from”,引用自: libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _spx_codec_parse libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _spx_codec_decode “_speex_nb_mode”,引用自: _speex_nb_mode$non_lazy_ptr 在 libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) “_res_GetXOFF”,引用自: _pjmedia_resample_create 在 libpjmedia-arm-apple-darwin9.a(resample_resample.o) “_gsm_decode”,引用自: libpjmedia-codec-arm-apple-darwin9.a(gsm.o) 中的 _gsm_codec_decode “_speex_mode_query”,引用自: libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _speex_get_next_frame “_speex_bits_advance”,引用自: libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _speex_get_next_frame libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _speex_get_next_frame libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _speex_get_next_frame libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _speex_get_next_frame libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _spx_codec_decode “_AudioComponentGetDescription”,引用自: libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o) 中的 _ca_stream_get_cap “_srtp_create”,引用自: _pjmedia_transport_srtp_start 在 libpjmedia-arm-apple-darwin9.a(transport_srtp.o) _pjmedia_transport_srtp_start 在 libpjmedia-arm-apple-darwin9.a(transport_srtp.o) “_speex_bits_remaining”,引用自: libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _speex_get_next_frame libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _speex_get_next_frame libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _speex_get_next_frame libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _speex_get_next_frame “_srtp_unprotect_rtcp”,引用自: libpjmedia-arm-apple-darwin9.a(transport_srtp.o) 中的 _srtp_rtcp_cb “_AudioOutputUnitStart”,引用自: libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o) 中的 _ca_stream_start “_AudioSessionRemovePropertyListenerWithUserData”,引用自: libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o) 中的 _ca_stream_destroy “_speex_decoder_ctl”,引用自: libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _spx_codec_modify libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _spx_codec_open libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _spx_codec_open “_speex_bits_nbytes”,引用自: libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _spx_codec_encode “_srtp_protect”,引用自: libpjmedia-arm-apple-darwin9.a(transport_srtp.o)中的_transport_send_rtp “_speex_bits_destroy”,引用自: libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _spx_codec_close libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o) 中的 _spx_codec_close “_srtp_unprotect”,引用自: libpjmedia-arm-apple-darwin9.a(transport_srtp.o) 中的 _srtp_rtp_cb libpjmedia-arm-apple-darwin9.a(transport_srtp.o) 中的 _srtp_rtp_cb

有人为 iphone 构建了 pjsip 并使用它创建了一个新项目吗?

【问题讨论】:

  • 缺少哪些符号?这些符号来自哪个库?您是否正在链接提供这些符号的库?
  • 我正在链接来自 pjsip 项目的库。所有缺少的符号都来自这些库。

标签: objective-c xcode linker pjsip


【解决方案1】:

您似乎(至少)缺少一些库。从符号来看,我想说:

  • 您可能忘记添加CoreAudio 框架。需要解析AudioUnitRender等符号
  • 应该有一个来自 pjsip 的 RTP 库,其中包含 pjrtp。如果有,则将其添加到其他链接标志。这将修复 _srtp_XXX 缺失的符号。
  • 应该有一个来自 pjsip 的 GSM 库,其中包含 gsm。如果有,则将其添加到其他链接标志。这将修复 _srtp_XXX 缺失的符号。
  • 应该有一个来自 pjsip 的 Speex 库,其中包含 speex。如果有,则将其添加到其他链接标志。这将修复 _srtp_XXX 缺失的符号。

遇到缺失符号时,找到它们所在位置的最佳方法是:

  • 查看符号名称。好的库总是在它们的符号前面加上前缀,所以你可以从名字中猜出它是哪个库。
  • 如果你有一个静态库并且你想知道导出的符号,那么你可以使用otool -Sv mystaticlib.a 命令。它将显示静态库的目录。

【讨论】:

  • 嗯.. 谢谢,我不知道如何/从哪里获得您提到的那些其他库。我确实尝试添加 coreaudio,但我看到有和没有它有 53 个错误,所以我删除了它。不过,我从来没有准确地验证过添加后缺少哪些符号。
  • 添加 CoreAudio 并不能解决缺少的 AudioUnitRender...奇怪
  • 如何添加 CoreAudio ?它是一个框架,因此将其作为框架添加到项目中应该设置正确的标志。如果您有一个包含所有 pjsip 库的文件夹,只需运行 otool 命令(请参阅我的答案)以查看是否可以发现符号。如果符号不存在,那么您应该在 pjsip 端查看如何获取 RTP、GSM 和 Speex 库。
  • 对于 CoreAudio,我只是像苹果的任何其他框架一样添加:右键单击框架并添加现有框架并选择 coreaudio。
【解决方案2】:

看来我是愚蠢的,并没有观察到一个名为第三方的文件夹。有缺少的库。在文档中没有提到他们,所以我什至没有费心去查看其他文件夹。我仍然缺少符号,但更少(我认为)。我还包括CoreAudio,我认为它没有帮助。我修改了我的项目:

添加到其他链接器标志:

-lg7221codec-arm-apple-darwin9 -lgsmcodec-arm-apple-darwin9 -lilbccodec-arm-apple-darwin9 -lmilenage-arm-apple-darwin9 -lresample-arm-apple-darwin9 -lspeex-arm-apple-darwin9 -lsrtp-arm-apple-darwin9

到图书馆搜索路径:

/Users/kudorgyozo/pjsip_iphone/third_party/lib

我不必修改标题搜索路径或包含我认为的新标题。

以下是现在缺少的内容:

  "_AudioSessionSetProperty", referenced from:
      _create_audio_unit in libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)
      _ca_stream_set_cap in libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)
      _ca_stream_set_cap in libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)
  "_AudioComponentInstanceNew", referenced from:
      _create_audio_unit in libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)
  "_AudioSessionAddPropertyListener", referenced from:
      _ca_stream_start in libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)
  "_AudioComponentInstanceDispose", referenced from:
      _propListener in libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)
      _ca_stream_destroy in libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)
  "_AudioSessionGetProperty", referenced from:
      _ca_stream_get_cap in libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)
      _ca_stream_get_cap in libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)
      _ca_stream_get_cap in libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)
      _ca_stream_get_cap in libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)
      _ca_stream_get_cap in libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)
      _ca_stream_get_cap in libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)
      _ca_stream_get_cap in libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)
  "_AudioComponentFindNext", referenced from:
      _ca_stream_set_cap in libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)
      _ca_factory_init in libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)
  "_AudioSessionSetActive", referenced from:
      _ca_stream_stop in libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)
      _ca_stream_start in libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)
  "_AudioUnitRender", referenced from:
      _input_callback in libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)
  "_AudioUnitSetProperty", referenced from:
      _create_audio_unit in libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)
      _create_audio_unit in libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)
      _create_audio_unit in libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)
      _create_audio_unit in libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)
      _create_audio_unit in libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)
      _create_audio_unit in libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)
      _create_audio_unit in libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)
  "_AudioUnitUninitialize", referenced from:
      _propListener in libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)
      _ca_stream_destroy in libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)
  "_AudioUnitInitialize", referenced from:
      _create_audio_unit in libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)
  "_AudioOutputUnitStop", referenced from:
      _ca_stream_stop in libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)
      _ca_stream_stop in libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)
      _ca_stream_start in libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)
      _interruptionListener in libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)
  "_AudioSessionInitialize", referenced from:
      _ca_factory_init in libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)
  "_AudioComponentGetDescription", referenced from:
      _ca_stream_get_cap in libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)
  "_AudioOutputUnitStart", referenced from:
      _ca_stream_start in libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)
  "_AudioSessionRemovePropertyListenerWithUserData", referenced from:
      _ca_stream_destroy in libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)
ld: symbol(s) not found

在我看来,所有这些都来自这个文件 libpjmedia-audiodev-arm-apple-darwin9.a,但我已将它包含在链接器标志中并在 lib 搜索路径中。

我能够成功构建它。缺少的框架是 AudioToolbox。谷歌搜索了 AudioSessionSetProperty,这就是我发现的。感谢您的帮助。

【讨论】:

    【解决方案3】:

    将每个静态库添加到您在构建 Pjsip 库期间构建的 xcode 项目中。然后添加与 Audio 和 Core 框架相关的所有框架。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-03
      • 2015-01-09
      • 1970-01-01
      • 2016-07-10
      • 2012-09-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多