我在 cpp 文件中有一个名为 init 的函数,但是当我编译它时,g++ 在目标文件中创建了一个名为 _Z4initv 的符号,所以当我在 ld 之后使用选项 -e init 链接时,显然 ld 无法识别该符号在里面。有没有办法用 g++ 创建 C 风格的符号名称?
问问题
230 次
1 回答
0
如果你有一个定义,例如
void init() { ... /* some code */ ... }
然后要禁止名称修改,您需要将其声明为extern "C"
:
extern "C" void init() { ... /* some code */ ... }
如果您在头文件中有要包含在 C 源文件中的声明,则需要使用以下__cplusplus
宏检查是否将头文件包含在 C 或 C++ 源文件中:
#ifdef __cplusplus
extern "C"
#endif
void init(void);
请注意,头文件中的函数必须void
在参数列表中声明,如果它不接受任何参数。那是因为声明在 C 中void init()
意味着其他东西。
于 2017-03-10T11:07:02.960 回答