0

Nordic nrf52840 の C プロジェクトにコンパイル済みライブラリを含めようとしています。以下 (私が理解している限り) は、いくつかのメソッドにリンクし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"その一部は、C コードをコンパイルする方法であると信じているという私の誤解かもしれません。#ifdef __cplusplusC++としてコンパイルすることをチェックしていると思いますが、これはC環境内でさえ利用されていないことを意味しますextern "C"か?

また、C 内のキーワードの適切な説明が見つからないようですEXPORT。これも問題の原因になる可能性があります。

Tl;dr: バカすぎる、質問が多すぎる、助けが必要です。よろしくお願いします。

4

1 に答える 1