Я пытаюсь включить скомпилированную библиотеку в проект 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: Слишком тупой, слишком много вопросов, нужна помощь. Плз и спасибо.