Ошибка: ожидается '=', ',', ';', '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 для решения.