首页 > 解决方案 > 如何更改 GNU C++ 程序的入口点函数?

问题描述

如何更改 GNU c++ 程序的入口点功能?

我能够更改 GCC C 程序的入口点。但是对 C++ 使用相同的编译选项会给我一个错误:找不到入口符号。

#include <stdio.h>
#include <stdlib.h>

int test(int argc, char *argv[]) ;
int main(int argc, char *argv[]);

int main(int argc, char *argv[])
{
  printf("HELLO main\n" );
  printf("PRESS ANY KEY TO EXIT\n");

  return (0);
}

int test(int argc, char *argv[]) 
{
  int val;
  printf("HELLO test()\n");
  val = main(argc, argv);
  exit(val) ;
}

我可以使用 gcc 编译和运行:

gcc -etest  entry.c -o entry

但用 g++ 编译不起作用:

$ g++ -etest  entry.c -o entry
/usr/bin/ld: warning: cannot find entry symbol test; defaulting to 0000000000000610

标签: gccg++

解决方案


test()函数必须声明extern "C"为避免 C++ 名称混淆:

extern "C" int test(int argc, char *argv[]);

推荐阅读