【问题标题】:How to force g++ to create C symbol name如何强制 g++ 创建 C 符号名称
【发布时间】:2017-03-10 10:53:46
【问题描述】:

我在一个 cpp 文件中有一个名为 init 的函数,但是当我编译它时,g++ 在目标文件中创建了一个名为 _Z4initv 的符号,所以当我在 ld 之后使用选项 -e init 链接时,显然 ld 没有识别符号 init。有没有办法用 g++ 创建 C 风格的符号名称?

【问题讨论】:

  • 以前在什么地方见过extern "C"?从来没有想过它有什么作用?
  • 我在文件开头写了#if define(__cplusplus) extern "C" #endif

标签: ld g++-4.7


【解决方案1】:

如果您有类似的定义,例如

void init() { ... /* some code */ ... }

然后要禁止name mangling,您需要将其声明为extern "C"

extern "C" void init() { ... /* some code */ ... }

如果您在头文件中有要包含在 C 源文件中的声明,则需要使用 __cplusplus 宏检查您是否将头文件包含在 C 或 C++ 源文件中:

#ifdef __cplusplus
extern "C"
#endif
void init(void);

请注意,如果头文件中的函数不带任何参数,则必须在参数列表中使用void 声明它。那是因为声明 void init() 在 C 中意味着 其他东西

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-16
    • 2016-06-22
    • 1970-01-01
    相关资源
    最近更新 更多