Я писал некоторый интерфейсный код для вызова подпрограмм C ++ из fortran, поэтому я выгрузил методы в блок extern «C». При компиляции с g ++. Exe (x86_64-win32-seh-rev1, Построен проектом MinGW-W64) 7.2.0 под Windows 10 у меня возникали ошибки сегментации при объявлении объекта ifstream. Я разбил его на следующий фрагмент кода:
tester. cpp
#include <fstream>
void x(){
std::ifstream infile;
}
extern "C"
{
void whatever() {
}
}
int main(){
x();
return 0;
}
Я создаю с помощью следующей команды: g ++ tester. cpp -o tester.out -O3 . Программа работает без ошибок при сборке с -O0, но дает сбой для -O1, -O2 и -O3. Компиляция с использованием msv c под Windows и g ++ 8.30 под Linux не вызывает ошибок сегментации. И блок extern «C», и вызов x () требуются программе для поиска sh.
Запуск 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
Это ошибка mingw или я что-то упускаю. std :: ifstream аварийно завершает работу в сборке Windows с кодом выхода 0xC0000409: Неизвестное программное исключение может быть связано.