Как устранить ошибку компоновщика в компиляторе C ++ - PullRequest
0 голосов
/ 04 октября 2011

Мне нужно скомпилировать PJSIP в CPP компиляторе. Потому что я интегрирую API с PJSIP. Это в CPP. Поэтому я должен использовать g++ вместо gcc. Но теперь я не интегрировал другие API.

Но я получаю ошибку компоновщика в CPP компиляторе. Если это компилятор C, он работает нормально.

Ошибка:

Undefined symbols for architecture arm:
  "_crypto_alloc", referenced from:
      srtp_stream_clone(srtp_stream_ctx_t const*, unsigned int, srtp_stream_ctx_t**)in libsrtp-arm-apple-darwin9.a(srtp.o)
      srtp_stream_alloc(srtp_stream_ctx_t**, srtp_policy_t const*) in libsrtp-arm-apple-darwin9.a(srtp.o)
      _srtp_create in libsrtp-arm-apple-darwin9.a(srtp.o)
  "_aes_icm_context_init", referenced from:
      srtp_kdf_init(srtp_kdf_t*, unsigned char const*)in libsrtp-arm-apple-darwin9.a(srtp.o)
  "_crypto_kernel_load_debug_module", referenced from:
      _srtp_init in libsrtp-arm-apple-darwin9.a(srtp.o)
  "_rdbx_init", referenced from:
      srtp_stream_init(srtp_stream_ctx_t*, srtp_policy_t const*) in libsrtp-arm-apple-darwin9.a(srtp.o)
      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", referenced from:
      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", referenced from:
      _srtp_unprotect_rtcp in libsrtp-arm-apple-darwin9.a(srtp.o)
      _srtp_protect_rtcp in libsrtp-arm-apple-darwin9.a(srtp.o)
      _srtp_unprotect in libsrtp-arm-apple-darwin9.a(srtp.o)
      _srtp_protect in libsrtp-arm-apple-darwin9.a(srtp.o)
...
...

На самом деле я ничего не изменил в makefile.

Примечание: В файле srtp.c уже включен файл alloc.h. Я оценил это и скомпилировал. Я получил ту же ошибку компоновщика только. Я думаю двумя способами. Но я не уверен в этом.
1. Он не связывается с .o файлами
2. Это не берет заголовочные файлы. (Мне не ясно с этим.)

Пожалуйста, помогите мне решить эту проблему.

Ответы [ 3 ]

2 голосов
/ 04 октября 2011
  1. Не компилируйте исходный код C с помощью компилятора C ++.Просто скомпилируйте его с помощью компилятора C и свяжите его с программой C ++ с помощью компоновщика C ++.
  2. Объявите все символы C в блоке extern "C";либо оберните ваши директивы #include в такой блок, либо поместите их в сами заголовки.(Проверьте, нет ли уже такого блока в заголовках.)

См. Также Как смешивать C и C ++ в C ++ FAQ.

2 голосов
/ 04 октября 2011

Когда символы C становятся неопределенными в программе C++, это означает, что их объявления не помечены как extern "C".

Стандартный способ обработки - это обернуть заголовки C:

#ifdef __cplusplus
extern "C" {
#endif

// C declarations here

#ifdef __cplusplus
}
#endif
0 голосов
/ 03 декабря 2016

Это ошибка компоновщика в вашем проекте pjsip. Вы используете xcode или любую другую IDE для разработки этого проекта?

Эта ошибка вызвана тем, что указанные выше файлы не связаны с вашим проектом успешно.

Добавьте этот отсутствующий библиотечный файл в ваш проект.

= >> libsrtp-рука-яблочно-darwin9.a

Перейдите по ссылке ниже, чтобы связать ваш библиотечный файл с вашим проектом.

ИСТОЧНИК: https://www.chilkatsoft.com/xcode-link-static-lib.asp

...