我目前正在使用 MSYS_NT-10.0-22621 Legion 3.4.7.x86_64 2023-07-14 16:57 UTC x86_64 Msys 并使用 mingw64
我的mingw64版本是
g++.exe (Rev7, Built by MSYS2 project) 13.1.0
Copyright (C) 2023 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
我写了一个简单的 main.cpp 文件,其中包含。
#include <iostream>
int main()
{
std::cout<<"Hello world"<<std::endl;
}
但是,在构建它时,即使它创建了 .exe 文件,它也不会输出任何内容。
因此,我使用 Mingw Natively 安装了以前的版本。 我的版本是
g++.exe (MinGW-W64 x86_64-ucrt-posix-seh, built by Brecht Sanders) 12.3.0
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
为了比较,我将相同的文件编译成程序集。
12.3.0
.file "main.cpp"
.text
.lcomm _ZStL8__ioinit,1,1
.def __main; .scl 2; .type 32; .endef
.section .rdata,"dr"
.LC0:
.ascii "Hello world\0"
.text
.globl main
.def main; .scl 2; .type 32; .endef
.seh_proc main
main:
.LFB1991:
pushq %rbp
.seh_pushreg %rbp
movq %rsp, %rbp
.seh_setframe %rbp, 0
subq $32, %rsp
.seh_stackalloc 32
.seh_endprologue
call __main
leaq .LC0(%rip), %rax
movq %rax, %rdx
movq .refptr._ZSt4cout(%rip), %rax
movq %rax, %rcx
call _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc
movq %rax, %rcx
movq .refptr._ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(%rip), %rax
movq %rax, %rdx
call _ZNSolsEPFRSoS_E
movl $0, %eax
addq $32, %rsp
popq %rbp
ret
.seh_endproc
.def __tcf_0; .scl 3; .type 32; .endef
.seh_proc __tcf_0
__tcf_0:
.LFB2524:
pushq %rbp
.seh_pushreg %rbp
movq %rsp, %rbp
.seh_setframe %rbp, 0
subq $32, %rsp
.seh_stackalloc 32
.seh_endprologue
leaq _ZStL8__ioinit(%rip), %rax
movq %rax, %rcx
call _ZNSt8ios_base4InitD1Ev
nop
addq $32, %rsp
popq %rbp
ret
.seh_endproc
.def _Z41__static_initialization_and_destruction_0ii; .scl 3; .type 32; .endef
.seh_proc _Z41__static_initialization_and_destruction_0ii
_Z41__static_initialization_and_destruction_0ii:
.LFB2523:
pushq %rbp
.seh_pushreg %rbp
movq %rsp, %rbp
.seh_setframe %rbp, 0
subq $32, %rsp
.seh_stackalloc 32
.seh_endprologue
movl %ecx, 16(%rbp)
movl %edx, 24(%rbp)
cmpl $1, 16(%rbp)
jne .L6
cmpl $65535, 24(%rbp)
jne .L6
leaq _ZStL8__ioinit(%rip), %rax
movq %rax, %rcx
call _ZNSt8ios_base4InitC1Ev
leaq __tcf_0(%rip), %rax
movq %rax, %rcx
call atexit
.L6:
nop
addq $32, %rsp
popq %rbp
ret
.seh_endproc
.def _GLOBAL__sub_I_main; .scl 3; .type 32; .endef
.seh_proc _GLOBAL__sub_I_main
_GLOBAL__sub_I_main:
.LFB2525:
pushq %rbp
.seh_pushreg %rbp
movq %rsp, %rbp
.seh_setframe %rbp, 0
subq $32, %rsp
.seh_stackalloc 32
.seh_endprologue
movl $65535, %edx
movl $1, %ecx
call _Z41__static_initialization_and_destruction_0ii
nop
addq $32, %rsp
popq %rbp
ret
.seh_endproc
.section .ctors,"w"
.align 8
.quad _GLOBAL__sub_I_main
.ident "GCC: (MinGW-W64 x86_64-ucrt-posix-seh, built by Brecht Sanders) 12.3.0"
.def _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc; .scl 2; .type 32; .endef
.def _ZNSolsEPFRSoS_E; .scl 2; .type 32; .endef
.def _ZNSt8ios_base4InitD1Ev; .scl 2; .type 32; .endef
.def _ZNSt8ios_base4InitC1Ev; .scl 2; .type 32; .endef
.def atexit; .scl 2; .type 32; .endef
.section .rdata$.refptr._ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_, "dr"
.globl .refptr._ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_
.linkonce discard
.refptr._ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_:
.quad _ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_
.section .rdata$.refptr._ZSt4cout, "dr"
.globl .refptr._ZSt4cout
.linkonce discard
.refptr._ZSt4cout:
.quad _ZSt4cout
以及 13.1 输出
.file "main.cpp"
.text
.def __main; .scl 2; .type 32; .endef
.section .rdata,"dr"
.LC0:
.ascii "Hello world\0"
.text
.globl main
.def main; .scl 2; .type 32; .endef
.seh_proc main
main:
.LFB2073:
pushq %rbp
.seh_pushreg %rbp
movq %rsp, %rbp
.seh_setframe %rbp, 0
subq $32, %rsp
.seh_stackalloc 32
.seh_endprologue
call __main
leaq .LC0(%rip), %rax
movq %rax, %rdx
movq .refptr._ZSt4cout(%rip), %rax
movq %rax, %rcx
call _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc
movq %rax, %rcx
movq .refptr._ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(%rip), %rax
movq %rax, %rdx
call _ZNSolsEPFRSoS_E
movl $0, %eax
addq $32, %rsp
popq %rbp
ret
.seh_endproc
.section .rdata,"dr"
_ZNSt8__detail30__integer_to_chars_is_unsignedIjEE:
.byte 1
_ZNSt8__detail30__integer_to_chars_is_unsignedImEE:
.byte 1
_ZNSt8__detail30__integer_to_chars_is_unsignedIyEE:
.byte 1
.ident "GCC: (Rev7, Built by MSYS2 project) 13.1.0"
.def _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc; .scl 2; .type 32; .endef
.def _ZNSolsEPFRSoS_E; .scl 2; .type 32; .endef
.section .rdata$.refptr._ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_, "dr"
.globl .refptr._ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_
.linkonce discard
.refptr._ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_:
.quad _ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_
.section .rdata$.refptr._ZSt4cout, "dr"
.globl .refptr._ZSt4cout
.linkonce discard
.refptr._ZSt4cout:
.quad _ZSt4cout
我的命令对于两个版本都是相同的,(没有任何优化选项)
g++ .\main.cpp -S
对于可执行文件
g++ .\main.cpp -o .\main.exe
在 msys2shell、mingw64shell 和 ucrt64shell 中使用
pacman -Qq | grep gcc
,
我收到这些包裹
gcc-libs
mingw-w64-x86_64-gcc
mingw-w64-x86_64-gcc-ada
mingw-w64-x86_64-gcc-fortran
mingw-w64-x86_64-gcc-libgfortran
mingw-w64-x86_64-gcc-libs
mingw-w64-x86_64-gcc-objc
mingw-w64-x86_64-libgccjit
所有外壳都一样
当我在 shell 中运行
$ pacman -Qi gcc-libs
时,它返回:
Name : gcc-libs
Version : 11.3.0-4
Description : Runtime libraries shipped by GCC
Architecture : x86_64
URL : https://gcc.gnu.org/
Licenses : GPL LGPL FDL custom
Groups : None
Provides : None
Depends On : None
Optional Deps : None
Required By : brotli bsdtar file inetutils libasprintf libassuan libbz2 libdb libexpat libgdbm
libgettextpo libgnutls libiconv libintl libksba liblz4 libnghttp2 libnpth libpcre libpcre2_8
libutil-linux libzstd ncurses wget zlib zstd
Optional For : None
Conflicts With : None
Replaces : None
Installed Size : 5.30 MiB
Packager : CI (msys2/msys2-autobuild/79096b75/5113523851)
Build Date : Mon, May 29, 2023 10:03:27 PM
Install Date : Tue, Jul 18, 2023 9:15:05 AM
Install Reason : Installed as a dependency for another package
Install Script : No
Validated By : Signature
运行从 13.1 生成的可执行文件不输出任何内容,12.3 可执行文件正确输出。在我更新之前它曾经可以工作。我本身也使用了相同版本的 Mingw,也有同样的问题。
这是 g++ 13.1 中的某种错误吗?为什么不起作用?