MinGW g++python 编译 exe的exe直接启动正常运行,但是用命令行启动却报错






3、python 编译 exe将.cpp文件生成目标文件


4、鏈接,将目标文件生成可执行文件







我们在python 编译 exec/c++代码的时候有人用gcc,有人用g++于是各种说法都来了,譬如c代码用gcc而c++代码用g++,或者说python 编译 exe用gcc链接用g++,一时也不知哪个说法正确如果再遇上个extern "C",分歧就更哆了这里我想作个了结,毕竟知识的目的是令人更清醒而不是更糊涂。 

误区一:gcc只能python 编译 exec代码,g++只能python 编译 exec++代码 两者都可以但是请注意:

1.後缀为.c的,gcc把它当作是C程序而g++当作是c++程序;后缀为.cpp的,两者都会认为是c++程序注意,虽然c++是c的超集但是两者对语法的要求是有区别的,例如:

分别对应前面红色标注的部分可见C++的语法规则更加严谨一些。

2.python 编译 exe阶段g++会调用gcc,对于c++代码两者是等价的,但是因为gcc命令不能自动和C++程序使用的库联接所以通常用g++来完成链接,为了统一起见干脆python 编译 exe/链接统统用g++了,这就给人一种错觉好像cpp程序只能用g++姒的。

误区二:gcc不会定义__cplusplus宏而g++会 实际上,这个宏只是标志着python 编译 exe器将会把代码按C还是C++语法来解释如上所述,如果后缀为.c并且采用gccpython 编译 exe器,则该宏就是未定义的否则,就是已定义

误区三:python 编译 exe只能用gcc,链接只能用g++ 严格来说这句话不算错误,但是它混淆了概念应该这樣说:python 编译 exe可以用gcc/g++,而链接可以用g++或者gcc -lstdc++因为gcc命令不能自动和C++程序使用的库联接,所以通常使用g++来完成联接但在python 编译 exe阶段,g++会自动調用gcc二者等价。

误区四:extern "C"与gcc/g++有关系 实际上并无关系无论是gcc还是g++,用extern "c"时都是以C的命名方式来为symbol命名,否则都以c++方式命名。试验如下:

唍全相同可见extern "C"与采用gcc/g++并无关系,以上的试验还间接的印证了前面的说法:在python 编译 exe阶段g++是调用gcc的。

测试文件test.cpp代码如下(下面为C代碼,只是使用G++来python 编译 exe而已)

输入test回车结果如下:


我要回帖

更多关于 python 编译 exe 的文章

 

随机推荐