在xcode中向项目添加库 - 未找到符号

时间:2010-06-01 11:55:11

标签: objective-c xcode linker pjsip

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

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

在Xcode中: 我已经指定了库和标题搜索路径,如下所示:

for includes:

/ 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 /包括

对于图书馆:

/ 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- darwin9

这是好的吗?因为它给了我没有发现错误的符号。我认为“包含”库中没有找到符号。我不知道有什么问题我刚刚开始理解如何在基于Linux的系统下构建一个应用程序,我之前只用C#编程。

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

"_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)
  "_srtp_deinit", referenced from:
      _pjmedia_srtp_deinit_lib in libpjmedia-arm-apple-darwin9.a(transport_srtp.o)
  "_gsm_encode", referenced from:
      _gsm_codec_encode in libpjmedia-codec-arm-apple-darwin9.a(gsm.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)
  "_speex_decoder_init", referenced from:
      _spx_codec_open in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
  "_res_Resample", referenced from:
      _pjmedia_resample_run in libpjmedia-arm-apple-darwin9.a(resample_resample.o)
      _pjmedia_resample_run in libpjmedia-arm-apple-darwin9.a(resample_resample.o)
  "_speex_bits_write", referenced from:
      _spx_codec_encode in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
  "_gsm_destroy", referenced from:
      _gsm_codec_close in libpjmedia-codec-arm-apple-darwin9.a(gsm.o)
      _gsm_codec_close in libpjmedia-codec-arm-apple-darwin9.a(gsm.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)
  "_speex_encoder_ctl", referenced from:
      _get_speex_info in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
      _get_speex_info in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
      _get_speex_info in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
      _get_speex_info in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
      _get_speex_info in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
      _get_speex_info in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
      _get_speex_info in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
      _get_speex_info in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
      _spx_codec_modify in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
      _spx_codec_modify in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
      _spx_codec_open in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
      _spx_codec_open in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
      _spx_codec_open in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
      _spx_codec_open in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
      _spx_codec_open in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
  "_speex_encoder_init", referenced from:
      _get_speex_info in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
      _spx_codec_open in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.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)
  "_srtp_dealloc", referenced from:
      _pjmedia_transport_srtp_stop in libpjmedia-arm-apple-darwin9.a(transport_srtp.o)
      _pjmedia_transport_srtp_stop in libpjmedia-arm-apple-darwin9.a(transport_srtp.o)
      _pjmedia_transport_srtp_start in libpjmedia-arm-apple-darwin9.a(transport_srtp.o)
  "_speex_lib_get_mode", referenced from:
      _pjmedia_codec_speex_init in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
      _pjmedia_codec_speex_init in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
  "_res_SrcLinear", referenced from:
      _pjmedia_resample_run in libpjmedia-arm-apple-darwin9.a(resample_resample.o)
      _pjmedia_resample_run in libpjmedia-arm-apple-darwin9.a(resample_resample.o)
  "_srtp_init", referenced from:
      _pjmedia_srtp_init_lib in libpjmedia-arm-apple-darwin9.a(transport_srtp.o)
  "_speex_bits_init", referenced from:
      _spx_codec_open in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
      _spx_codec_open in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.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)
  "_speex_decoder_destroy", referenced from:
      _spx_codec_close in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
  "_AudioUnitInitialize", referenced from:
      _create_audio_unit in libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)
  "_speex_bits_reset", referenced from:
      _spx_codec_encode in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.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)
  "_srtp_protect_rtcp", referenced from:
      _transport_send_rtcp2 in libpjmedia-arm-apple-darwin9.a(transport_srtp.o)
  "_speex_decode_int", referenced from:
      _spx_codec_recover in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
      _spx_codec_decode in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
  "_speex_encoder_destroy", referenced from:
      _get_speex_info in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
      _spx_codec_close in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
  "_gsm_create", referenced from:
      _gsm_codec_open in libpjmedia-codec-arm-apple-darwin9.a(gsm.o)
      _gsm_codec_open in libpjmedia-codec-arm-apple-darwin9.a(gsm.o)
  "_crypto_get_random", referenced from:
      _generate_crypto_attr_value in libpjmedia-arm-apple-darwin9.a(transport_srtp.o)
  "_speex_bits_unpack_unsigned", referenced from:
      _speex_get_next_frame in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
      _speex_get_next_frame in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
      _speex_get_next_frame in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
      _speex_get_next_frame in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
      _speex_get_next_frame in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
  "_speex_encode_int", referenced from:
      _spx_codec_encode in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
  "_octet_string_hex_string", referenced from:
      _pjmedia_transport_srtp_start in libpjmedia-arm-apple-darwin9.a(transport_srtp.o)
      _pjmedia_transport_srtp_start in libpjmedia-arm-apple-darwin9.a(transport_srtp.o)
  "_AudioSessionInitialize", referenced from:
      _ca_factory_init in libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)
  "_speex_bits_read_from", referenced from:
      _spx_codec_parse in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
      _spx_codec_decode in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
  "_speex_nb_mode", referenced from:
      _speex_nb_mode$non_lazy_ptr in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
  "_res_GetXOFF", referenced from:
      _pjmedia_resample_create in libpjmedia-arm-apple-darwin9.a(resample_resample.o)
  "_gsm_decode", referenced from:
      _gsm_codec_decode in libpjmedia-codec-arm-apple-darwin9.a(gsm.o)
  "_speex_mode_query", referenced from:
      _speex_get_next_frame in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
  "_speex_bits_advance", referenced from:
      _speex_get_next_frame in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
      _speex_get_next_frame in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
      _speex_get_next_frame in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
      _speex_get_next_frame in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
      _spx_codec_decode in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
  "_AudioComponentGetDescription", referenced from:
      _ca_stream_get_cap in libpjmedia-audiodev-arm-apple-darwin9.a(coreaudio_dev.o)
  "_srtp_create", referenced from:
      _pjmedia_transport_srtp_start in libpjmedia-arm-apple-darwin9.a(transport_srtp.o)
      _pjmedia_transport_srtp_start in libpjmedia-arm-apple-darwin9.a(transport_srtp.o)
  "_speex_bits_remaining", referenced from:
      _speex_get_next_frame in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
      _speex_get_next_frame in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
      _speex_get_next_frame in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
      _speex_get_next_frame in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
  "_srtp_unprotect_rtcp", referenced from:
      _srtp_rtcp_cb in libpjmedia-arm-apple-darwin9.a(transport_srtp.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)
  "_speex_decoder_ctl", referenced from:
      _spx_codec_modify in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
      _spx_codec_open in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
      _spx_codec_open in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
  "_speex_bits_nbytes", referenced from:
      _spx_codec_encode in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
  "_srtp_protect", referenced from:
      _transport_send_rtp in libpjmedia-arm-apple-darwin9.a(transport_srtp.o)
  "_speex_bits_destroy", referenced from:
      _spx_codec_close in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
      _spx_codec_close in libpjmedia-codec-arm-apple-darwin9.a(speex_codec.o)
  "_srtp_unprotect", referenced from:
      _srtp_rtp_cb in libpjmedia-arm-apple-darwin9.a(transport_srtp.o)
      _srtp_rtp_cb in libpjmedia-arm-apple-darwin9.a(transport_srtp.o)

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

3 个答案:

答案 0 :(得分:8)

您似乎缺少(至少)某些库。从符号中,我会说:

  • 您可能忘记添加CoreAudio框架。需要解析像AudioUnitRender
  • 这样的符号
  • 应该有一个来自pjsip的RTP库,包含pjrtp。如果有,则将其添加到Other Link Flags。这将修复_srtp_XXX缺少的符号。
  • 应该有一个来自pjsip的GSM库,其中包含gsm。如果有,则将其添加到Other Link Flags。这将修复_srtp_XXX缺少的符号。
  • 应该有一个来自pjsip的Speex库,包含speex。如果有,则将其添加到Other Link Flags。这将修复_srtp_XXX缺少的符号。

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

  • 查看符号名称。好的库总是在它们的符号前面加上前缀,因此从名称中你可以猜出哪个库拥有它。
  • 如果您设置了静态库,并且想知道导出的符号,则可以使用otool -Sv mystaticlib.a命令。它将显示静态库的内容表。

答案 1 :(得分:3)

看起来我很傻,并没有观察到一个名为第三方的文件夹。有缺少的库。在文档中没有提及他们,所以我甚至没有在其他文件夹中查找。我仍然缺少符号但更少(我认为)。我还包括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,这就是我发现的方式。谢谢你的帮助。

答案 2 :(得分:0)

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