如何更改 GNU C++ 程序的入口点函数?
how to change entry point function of GNU C++ program?
如何改变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
必须使用 extern "C"
声明 test()
函数以避免 C++ 名称混淆:
extern "C" int test(int argc, char *argv[]);
请注意,C++ 程序的入口点是符号 _start
。该函数建立C和C++标准库,调用全局对象的构造函数并最终调用main
。通过更改入口点,您可以绕过该初始化,因此 printf
可能无法工作,因为 stdout
尚未初始化。
如何改变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
必须使用 extern "C"
声明 test()
函数以避免 C++ 名称混淆:
extern "C" int test(int argc, char *argv[]);
请注意,C++ 程序的入口点是符号 _start
。该函数建立C和C++标准库,调用全局对象的构造函数并最终调用main
。通过更改入口点,您可以绕过该初始化,因此 printf
可能无法工作,因为 stdout
尚未初始化。