Extern "C"错误在'int'之前'asm'或'__attribute__'
Extern "C" error expected '=', ',', ';', 'asm' or '__attribute__' before 'int'
我正在尝试将编译库包含在北欧nrf52840上的C项目中。下面(据我了解(是一种链接到项目其余部分.lib
文件中foo
和bar
的一些方法的方法。尝试使用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 __cplusplus
正在检查编译为 c++ 所以这是否意味着extern "C"
甚至没有在 C 环境中使用?
另外,我似乎无法在 C 中找到对EXPORT
关键字的良好解释。这也可能是我问题的根源。
Tl;大卫:太愚蠢了,问题太多了,需要帮助。请和谢谢。
我认为问题是您情况下的EXPORT
没有定义为任何东西。因此,它只会保留在源代码中并导致语法错误。它可能打算在静态库上定义为类似 __declspec(dllexport( 的内容,而对于静态使用,则不定义为任何内容(空字符串(。
您应该能够通过将EXPORT
定义为空字符串来修复它。根据库的不同,在某些配置头文件中可能会有一个位置。否则,您也可以在编译器调用级别上使用 define ,但这可能不是可取的,因为它会从源代码中删除所有EXPORT
单词。
相关文章:
- 如何确保C++函数在定义之前声明(如override关键字)
- 为什么在定义函数之前先声明它
- Arduino:for/while/if在void setup()或void loop()之前?——错误:之前需要不合格
- 程序在执行程序的其余部分之前退出
- 如何将模板转换为C++11之前的模板
- '||'之前的预期主要表达
- (C++)为什么静态成员可以在初始化之前使用
- 标记 '","' 之前的预期主表达式
- C++的解析器在可以区分比较和模板实例化之前会做什么?
- Extern "C"错误在'int'之前'asm'或'__attribute__'
- 尝试用纯 c 编程 arduino,得到以下错误:预期的"="、""、";",'asm'或"打印"之前的'__attribute__'|
- 错误:“命令” /重复使用ASM挥发性之前的预期字符串字母
- 错误:在“:”标记之前应为“=”、“”、“;”、“ASM”或“__attribute__”
- 错误:在令牌之前'asm'或'__attribute__' ':'错误
- C++:函数返回静态库中的字符串给出错误:在令牌之前':'预期的"="、""、";"、'asm'或'__attribute__'
- 定义宏错误:'asm'之前的预期主异常
- 头文件错误:预期的"="、""、";",'asm'或之前'__attribute__'
- C++错误:在"I2Cdev"(类名)之前预期为"="、""、";"、"asm"或"__attribute__"
- AVR-C 错误:在令牌之前'asm' '<'预期"="、""、";"、或'__attribute__'
- c++错误:预期 ‘=’, ‘,’, ‘;’, ‘ asm”或“__attribute__”之前,“秘密”