Xcodeのプロジェクトにライブラリを追加する - シンボルが見つかりません
-
05-10-2019 - |
質問
XcodeでiPhoneアプリを使用しようとしています pjsip. 。問題は、ライブラリをリンクする方法がわからないことです。他のライブラリを使用しているのはこれが初めてなので、おそらく何か間違ったことをしているだけです。 :(
Mac OS Xのこのフォルダーにライブラリのアームバージョンがあります。 /users/kudorgyozo/pjsip_iphone
Xcode:このようなライブラリとヘッダーの検索パスを指定しました。
含まれる場合:
/users/kudorgyozo/pjsip_iphone/pjlib/include/users/kudorgyozo/pjsip_iphone/pjlib-util/include/users/kudorgyozo/pjsip_iphone /含む
ライブラリの場合:
/users/kudorgyozo/pjsip_iphone/pjlib/lib/lib/users/kudorgyozo/pjsip_iphone/pjlib-util/lib/users/kudorgyozo/pjsip_iphone/pjmedia/lib/lib/cudorgyozo/pjsip_ipf_ipphmiso/pjiphmezozo /lib
そして、「他のリンカーフラグ」を使用してください。
-lpj-arm-apple-darwin9 -lpjlib-util-apple-darwin9 -lpjmedia-arm-apple-darwin9 -lpjmedia-audev-arm-apple-darwin9 -lpjmedia-codec-arm-apple-darwin9 -lpjsdp-arm-arm -apple-darwin9 -lpjnath-arm-apple-darwin9 -lpjsip-arm-apple-darwin9 -lpjsip-simple-apple-darwin9 -lpjsip-ua-apple-darwin9 -lpjsua-arm-apple-darwin9
これは大丈夫ですか?エラーが見つからないシンボルを与えてくれるからです。 「含まれている」ライブラリからシンボルは見つからないと思います。何が間違っているのかわかりませんが、Linuxベースのシステムの下でアプリの構築がどのように機能するかを理解し始めたばかりです。
編集:ここに欠落しているシンボルのリストがあります:
"_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を作成し、それを使用して新しいプロジェクトを作成しましたか?
解決
(少なくとも)いくつかのライブラリが欠けているようです。シンボルから、私はそれを言うでしょう:
- おそらく、Coreaudioフレームワークを追加するのを忘れてしまいました。のようなシンボルを解決するには必要です
AudioUnitRender
- PJSIPからRTPライブラリがあるはずです。
pjrtp
. 。ある場合は、他のリンクフラグに追加します。それが修正されます_srtp_XXX
シンボルがありません。 - PJSIPからGSMライブラリがあるはずです。
gsm
. 。ある場合は、他のリンクフラグに追加します。それが修正されます_srtp_XXX
シンボルがありません。 - PJSIPからSPEEXライブラリがあるはずです。
speex
. 。ある場合は、他のリンクフラグに追加します。それが修正されます_srtp_XXX
シンボルがありません。
不足しているシンボルに遭遇したとき、それらがどこにいるかを見つける最良の方法は次のとおりです。
- シンボル名を見てください。優れたライブラリは常にシンボルを接頭しているため、名前からどのライブラリがそれを保持しているかを推測できます。
- 静的ライブラリをセットにしていて、エクスポートされたシンボルを知りたい場合は、
otool -Sv mystaticlib.a
指図。静的ライブラリのコンテンツの表が表示されます。
他のヒント
私は愚かであり、サードパーティと呼ばれるフォルダーを観察しなかったようです。不足しているライブラリがあります。ドキュメントでは言及されていないので、他のフォルダーを見ることさえ気にしませんでした。私はまだシンボルが欠けていますが、少ないと思います(私は思う)。私もコレアーディオを含めました、私はそれが役に立たなかったと思います。プロジェクトを変更しました:
他のリンカーフラグに追加:
-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でした。 Googleがaudiosionsionsetpropertyを検索しましたが、それが私が見つけた方法です。手伝ってくれてありがとう。
PJSIPライブラリの構築中に構築されたXcodeプロジェクトにすべての静的ライブラリを追加します。次に、オーディオおよびコアフレームワークに関連するすべてのフレームワークを追加します。