【发布时间】:2013-03-29 23:14:25
【问题描述】:
我有一个奇怪的。我正在使用供应商的头文件开发嵌入式系统。我正在使用 GCC 4.6.3 编译文件。我想在我的代码中使用 C++,我有错误我无法弄清楚。我正在运行一个供应商示例程序,我所做的只是将 main.c 文件的名称更改为 main.cpp。因此,我假设 C++ 编译器正在解释头文件。其中之一包含以下几行:
__attribute__((naked)) static return_type signature \
{ \
__asm( \
"svc %0\n" \
"bx r14" : : "I" (number) : "r0" \
); \
}
如果文件名为 main.c,则文件编译正确,我认为这是因为 C 编译器正在处理该文件。如果我使用 C++,我得到的错误是
error: impossible constraint in 'asm'
但同样,我对 C 编译器没有任何问题。我需要在 C++ 文件中调用使用此定义的函数。我考虑过编写保留在 c 端并链接到它们的包装函数,但这将是一个真正的痛苦,而且效率较低。有什么建议么?
【问题讨论】:
-
如果它在头文件中,你记得
extern "C"吗? -
我最后尝试了它,但我没想到它会起作用。据我所知, extern "C" 只影响链接,而不是编译。我认为我得到的是编译错误,而不是链接错误。 (还是)感谢你的建议。 stackoverflow.com/questions/1041866/…
-
我明白了,我跳过了它是宏的部分:P
-
它也可能会影响 ABI。
-
您确定 C++ 编译找到了交叉编译器,并且您不是不小心使用了宿主编译器吗?
标签: c++ gcc embedded arm inline-assembly