Ошибка сегментации при компиляции с помощью mingw g ++ 7.2, объявление ifstream и использование extern "C" - PullRequest
1 голос
/ 04 мая 2020

Я писал некоторый интерфейсный код для вызова подпрограмм 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: Неизвестное программное исключение может быть связано.

...