Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用mingw g+编译时出现分段错误+;7.2,声明ifstream并使用extern“;"; 我正在编写一些接口代码,从Fortran调用C++例程,这就是为什么我将这些方法转储到一个外部“C”块中。在Windows 10下使用g++.exe(x86_64-win32-seh-rev1,由MinGW-W64项目构建)7.2.0进行编译时,我在声明ifstream对象时遇到分段错误。我将其分解为以下代码段:_C++_Segmentation Fault_Mingw_Ifstream_Extern C - Fatal编程技术网

使用mingw g+编译时出现分段错误+;7.2,声明ifstream并使用extern“;"; 我正在编写一些接口代码,从Fortran调用C++例程,这就是为什么我将这些方法转储到一个外部“C”块中。在Windows 10下使用g++.exe(x86_64-win32-seh-rev1,由MinGW-W64项目构建)7.2.0进行编译时,我在声明ifstream对象时遇到分段错误。我将其分解为以下代码段:

使用mingw g+编译时出现分段错误+;7.2,声明ifstream并使用extern“;"; 我正在编写一些接口代码,从Fortran调用C++例程,这就是为什么我将这些方法转储到一个外部“C”块中。在Windows 10下使用g++.exe(x86_64-win32-seh-rev1,由MinGW-W64项目构建)7.2.0进行编译时,我在声明ifstream对象时遇到分段错误。我将其分解为以下代码段:,c++,segmentation-fault,mingw,ifstream,extern-c,C++,Segmentation Fault,Mingw,Ifstream,Extern C,测试仪.cpp #include <fstream> void x(){ std::ifstream infile; } extern "C" { void whatever() { } } int main(){ x(); return 0; } #包括 void x(){ std::ifstream-infle; } 外部“C” { 无效{ } } int main(){ x(); 返回0; } 我正在使用以下命令进行构建:g++

测试仪.cpp

#include <fstream>

void x(){
    std::ifstream infile;
}

extern "C"
{
    void whatever() {
    }
}

int main(){
    x();
    return 0;
}
#包括
void x(){
std::ifstream-infle;
}
外部“C”
{
无效{
}
}
int main(){
x();
返回0;
}
我正在使用以下命令进行构建:g++tester.cpp-o tester.out-O3。当使用-O0构建时,程序运行无故障,但在-O1、-O2和-O3时崩溃。在Windows下使用msvc和在Linux下使用g++8.30编译不会产生分段错误。程序崩溃需要外部“C”块和对x()的调用

运行gdb backtrace将提供以下输出:

    Thread 1 received signal SIGSEGV, Segmentation fault.
0x000000006fce18b2 in ?? ()
   from C:\Program Files\Git\mingw64\bin\libstdc++-6.dll
(gdb) backtrace
#0  0x000000006fce18b2 in ?? ()
   from C:\Program Files\Git\mingw64\bin\libstdc++-6.dll
#1  0x000000006fcf7b6c in ?? ()
   from C:\Program Files\Git\mingw64\bin\libstdc++-6.dll
#2  0x000000006fcf9b41 in ?? ()
   from C:\Program Files\Git\mingw64\bin\libstdc++-6.dll
#3  0x000000000040163a in std::basic_ifstream<char, std::char_traits<char> >::basic_ifstream (this=0x61fc20, __in_chrg=<optimized out>,
    __vtt_parm=<optimized out>)
    at C:/mingw64/lib/gcc/x86_64-w64-mingw32/7.2.0/include/c++/fstream:482
#4  x () at tester.cpp:4
#5  0x0000000000402ede in main () at tester.cpp:14
线程1接收到信号SIGSEGV,分段故障。
0x000000006fce18b2英寸??()
来自C:\Program Files\Git\mingw64\bin\libstdc++-6.dll
(gdb)回溯
#0 0x000000006fce18b2英寸??()
来自C:\Program Files\Git\mingw64\bin\libstdc++-6.dll
#1 0x000000006fcf7b6c英寸??()
来自C:\Program Files\Git\mingw64\bin\libstdc++-6.dll
#2 0x000000006fcf9b41英寸??()
来自C:\Program Files\Git\mingw64\bin\libstdc++-6.dll
#std::basic_ifstream::basic_ifstream中的3 0x000000000040163a(此=0x61fc20,__in_chrg=,
__vtt_parm=)
位于C:/mingw64/lib/gcc/x86_64-w64-mingw32/7.2.0/include/C++/fstream:482
#测试仪处的4 x()。cpp:4
#5 0x0000000000402DE在测试仪处的主()中。cpp:14

这是mingw的错误还是我遗漏了什么。可能有关联

堆栈跟踪与发布的代码不对应…您是对的,抱歉。我更新了跟踪你需要确保你的代码加载的是编译器附带的libstdc++而不是从git安装路径中随机获取的版本我怀疑这是编译器错误。如果编译器不能从这样一个玩具程序中生成正确的可执行文件,那将是非常不幸的。如前所述,可能正在使用一个无效/不兼容的库。嗯,替换该库可能只会导致git崩溃,而修复path环境变量可能是更好的方法堆栈跟踪与发布的代码不对应…你是对的,抱歉。我更新了跟踪你需要确保你的代码加载的是编译器附带的libstdc++而不是从git安装路径中随机获取的版本我怀疑这是编译器错误。如果编译器不能从这样一个玩具程序中生成正确的可执行文件,那将是非常不幸的。如前所述,可能正在使用无效/不兼容的库。嗯,替换该库可能只会导致git崩溃,而修复path环境变量可能是更好的方法