0

コンパイラでコンパイルする必要がありPJSIPますCPP。API を と統合しているためですPJSIP。にありCPPます。だから私はg++の代わりに使用する必要がありgccます。しかし、今は他の API を統合していません。

CPPしかし、コンパイラでリンカ エラーが発生します。Cコンパイラであれば問題なく動作しています。

エラー:

アーキテクチャ アームの未定義シンボル:
  「_crypto_alloc」、以下から参照:
      srtp_stream_clone(srtp_stream_ctx_t const*, unsigned int, srtp_stream_ctx_t**) in libsrtp-arm-apple-darwin9.a(srtp.o)
      libsrtp-arm-apple-darwin9.a(srtp.o) の srtp_stream_alloc(srtp_stream_ctx_t**, srtp_policy_t const*)
      libsrtp-arm-apple-darwin9.a(srtp.o) の _srtp_create
  「_aes_icm_context_init」、次から参照:
      srtp_kdf_init(srtp_kdf_t*, unsigned char const*) in libsrtp-arm-apple-darwin9.a(srtp.o)
  「_crypto_kernel_load_debug_module」、以下から参照:
      libsrtp-arm-apple-darwin9.a(srtp.o) の _srtp_init
  「_rdbx_init」、以下から参照:
      libsrtp-arm-apple-darwin9.a(srtp.o) の srtp_stream_init(srtp_stream_ctx_t*, srtp_policy_t const*)
      srtp_stream_clone(srtp_stream_ctx_t const*, unsigned int, srtp_stream_ctx_t**) in libsrtp-arm-apple-darwin9.a(srtp.o)
  「_key_limit_clone」、次から参照:
      srtp_stream_clone(srtp_stream_ctx_t const*, unsigned int, srtp_stream_ctx_t**) in libsrtp-arm-apple-darwin9.a(srtp.o)
  「_auth_get_tag_length」、以下から参照:
      libsrtp-arm-apple-darwin9.a(srtp.o) の _srtp_unprotect_rtcp
      libsrtp-arm-apple-darwin9.a(srtp.o) の _srtp_protect_rtcp
      libsrtp-arm-apple-darwin9.a(srtp.o) の _srtp_unprotect
      libsrtp-arm-apple-darwin9.a(srtp.o) の _srtp_protect
...
...

実際、私は何も変更していませんmakefile

注:ファイルに はsrtp.c、既に含まれているalloc.hファイルがあります。褒めてまとめました。同じリンカーエラーのみが発生しました。私は2つの方法で考えています。しかし、私はこれで確信が持てません。1.ファイル
とリンクしていませ ん。 2. ヘッダー ファイルを取得していません。(私はこれについて明確ではありません。).o

この問題を解決するのを手伝ってください。

4

3 に答える 3

2

Cプログラムでシンボルが未定義になると、C++その宣言が としてマークされていないことを意味しextern "C"ます。

Cこれを処理する標準的な方法は、ヘッダーを次のようにラップすることです。

#ifdef __cplusplus
extern "C" {
#endif

// C declarations here

#ifdef __cplusplus
}
#endif
于 2011-10-04T10:17:27.167 に答える
2
  1. C ソース コードを C++ コンパイラでコンパイルしないでください。C コンパイラでコンパイルし、C++ リンカーを使用して C++ プログラムにリンクするだけです。
  2. extern "C"ブロック内のすべての C シンボルを宣言します。ディレクティブをそのようなブロックでラップするか#include、ヘッダー自体に配置します。(ヘッダーに既にそのようなブロックがないかどうかを確認してください。)

C++ FAQ のC と C++ を混在させる方法も参照してください。

于 2011-10-04T10:20:13.417 に答える
0

pjsip プロジェクトのリンカー エラーです。このプロジェクトの開発に xcode またはその他の IDE を使用していますか?

このエラーは、上記のファイルがプロジェクトに正常にリンクされていないために発生します。

以下の不足しているライブラリ ファイルをプロジェクトに追加します。

=>>libsrtp-arm-apple-darwin9.a

以下のリンクに従って、ライブラリ ファイルをプロジェクトにリンクします。

ソース: https://www.chilkatsoft.com/xcode-link-static-lib.asp

于 2016-12-03T02:07:56.113 に答える