g ++ не игнорирует "deprecated-декларация" + ошибка "Werror" при использовании "-Wno-deprecated" - PullRequest
0 голосов
/ 14 ноября 2018

Тот же самый случай из зачеркнутого случая здесь. У меня устаревший вызов функции, и он выдает ошибку. Я хочу игнорировать это сейчас. Я могу использовать #undef, но я предпочитаю использовать флаг компиляции "-Wno-deprecated", но по какой-то причине я получаю ту же ошибку.

У меня есть два модуля с обращениями к развращенному фунтоин:

SSH_DEPRECATED LIBSSH_API int ssh_get_pubkey_hash(ssh_session session, unsigned char **hash);
// SSH_DEPRECATED == __attribute__ ((deprecated))
// as can be seen from:
//   #define SSH_DEPRECATED __attribute__ ((deprecated))

Модуль A (модуль с ошибками) выводит сообщение об ошибке «отклонен». Я предположил, что причина, по которой я увидел только одну ошибку, заключалась в том, что флаги компиляции A включали -Werror. Однако оба модуля имеют одинаковый флаг.

Однако модуль B имеет что-то другое. A включает libssh.h из arm-buidroot-linux-gnueabi, где B включает это libssh.h и другую копию libssh.h (я предполагаю, что 2-я копия является копией -паста старой версии libssh.h).

Я предположил, что SSH_DEPRECATED не появляется на 2-м libssh.h, но я ошибся, так что теперь я не тот, кто мог быть причиной.

В настоящее время я получил его на работу, удалив -Werror в A , но это плохо, так как:

  1. Я не знаю, в чем причина (то есть, как это работает в B )
  2. Мне нужен этот флаг [-Werror] (это можно решить, добавив -Wno-deprecated , а затем вернув -Werror, но Я не думаю, что это хорошее решение. Больше похоже на взлом)

Мой вопрос: Что в A может вызвать это устаревшее предупреждение, которое не применяется в B ?

Использование powerpc-linux-gnu-g++ (Sourcery G++ Lite 4.3-74) 4.3.2

Примечание: я знаю, что устарело Указывает, что имя или сущность, объявленные с этим атрибутом, устарели, то есть использование разрешено, но по какой-то причине не рекомендуется.

...