Ошибка: ожидается '=', ',', ';', 'asm' или '__attribute__' перед 'int'

При компиляции C-программы в LINUX я получаю следующее. ошибка:

stream.h:1123: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'int'
stream.h:1124: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'mblk_t'
stream.h:1125: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'mblk_t'

Строки 1123,112 и 1125 приведены ниже:

__STREAMS_EXTERN int adjmsg(mblk_t *mp, register ssize_t length);
__STREAMS_EXTERN mblk_t *allocb(size_t size, unsigned int priority);
__STREAMS_EXTERN mblk_t *copyb(register mblk_t *mp);

Программа на C включает заголовочный файл, который, в свою очередь, включает stream.h Есть идеи, как это можно решить?

3 ответа

Решение

Не совсем понятно контекст вашего кода, но мне кажется, что вы используете библиотеку OpenSSL (или вы делаете копирование и вставку из этого исходного кода).

streams_fastcall макрос определяется в kmem.h заголовочный файл Вы включили это? Если вы просто копируете и вставляете, просто добавьте эти строки перед STREAMS_EXTERN определение:

#ifndef streams_fastcall
#if defined __i386__ || defined __x86_64__ || defined __k8__
#define streams_fastcall __attribute__((__regparm__(3)))
#else
#define streams_fastcall
#endif
#endif

Примечание: streams_fastcall звучит как Microsoft Specific (но широко используется в Windows) соглашение о вызовах под названием __fastcall, Я думаю, они использовали это имя, потому что оно использует regparm атрибут, чтобы указать, что некоторые аргументы должны быть переданы с использованием регистров вместо стека, и это то, что __fastcall определяет (или просто потому, что это просто быстрее!)

Это довольно ясно, что __STREAMS_EXTERN определяется таким образом, что все портит.

Как __STREAMS_EXTERN определены?

В случае, если ошибка не связана с отсутствием; или похожая синтаксическая ошибка в вашем коде, проверьте, не содержит ли неправильные ссылки на openSSL.

В ваш openSSL входят err.h и evp.h в / opt / openssl / include / openssl, и вы компилируете директивы, имеющие -I. -L /opt/openssl/lib, -l crypto и -l dl

включение этого файла в ваш.h файл вызывает ошибку: #include (то же самое с err.h).

Просто замените его следующим: #include для решения.

Другие вопросы по тегам