Экстерьер «C» ожидается ошибка ‘=’, ‘,’, ‘;’, ‘asm’ или ‘__attribute__’ перед ‘int’

Я пытаюсь включить скомпилированную библиотеку в проект C на скандинавском nrf52840. Ниже (насколько я понимаю) есть способ ссылки на некоторые методы foo а также bar в пределах .lib файл для остальной части проекта. При попытке скомпилировать это с Segger Embedded Studio я получаю следующее expected '=', ',', ';', 'asm' or '__attribute__' before 'int' ошибка со следующим фрагментом кода:

#ifndef _FOOBAR_SERVICE_H_
#define _FOOBAR_SERVICE_H_

#if (defined(__linux__) || defined(__APPLE__) || defined(ARDUINO) ||
defined(__MSP430FR5969__))
#define IMPORT __attribute__ ((visibility ("default")))
#define EXPORT __attribute__ ((visibility ("default")))
#define LOCAL  __attribute__ ((visibility ("hidden")))
#elif defined(_WIN32)
#define EXPORT __declspec(dllexport)
#endif

#include <stdbool.h>

#ifdef __cplusplus

extern "C"{
#endif

EXPORT int ble_foo(unsigned char  *a, unsigned char *buffer);  //<--(error)

EXPORT int ble_bar(unsigned char  *b, unsigned char *buffer);  //<--(same error)

#ifdef __cplusplus
}
#endif
#endif /* _FOOBAR_SERVICE_H_ */

Выше #include "foobar_ble.h" включены в мой main.c файл.

Частично это может быть моим недоразумением extern "C" Я считаю, что это способ компиляции кода на Си. Я верю #ifdef __cplusplus проверяет компиляцию как c ++, значит ли это, что extern "C" даже не используется в среде C?

Кроме того, я не могу найти хорошее объяснение EXPORT ключевое слово в C. Это также может быть источником моих проблем.

Tl; dr: Слишком тупой, слишком много вопросов, нужна помощь. Plz & Благодарю.

0

Решение

Я думаю, что проблема в том, что EXPORT в вашем случае ничего не определено. Так что он просто останется в исходном коде и вызовет синтаксическую ошибку. Вероятно, он предназначен для определения чего-то вроде __declspec (dllexport) в статических библиотеках и ничего (пустая строка) для статического использования.

Вы должны быть в состоянии исправить это, определив EXPORT в пустую строку. В зависимости от библиотеки может быть место для этого в некотором файле заголовка конфигурации. В противном случае вы также можете использовать определение на уровне вызова компилятора, но это не может быть предпочтительным, так как удаляет все EXPORT слова из исходного кода.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]