简体   繁体   中英

Entry Point Not Found Error on running c++ .exe file after compiling with mingw g++

I am using the latest MinGW to compile my c++ code with g++ compiler on Windows 10. The code compiles without errors but when I run the execution file it gives the error: The procedure entry point _ZNSt6chrono3_V212system_clock3nowEv could not be located in the dynamic link library A:\\Code\\DAA Assignments\\2\\outputunsorted1.exe The confusing part is that the same code runs totally fine when compiled with cygwin but gives this error only in MinGW. I also tried reinstalling MinGW multiple times. I checked the MinGW folder, it does have the chrono library, so why is it not finding the entry point. Another weird thing is that the end of the error says "in dynamic link library A:\\Code\\DAA Assignments\\2\\outputunsorted1.exe" which is the address of my execution file, so why is the program referring to it as library? My cpp code:

#include<iostream>
#include<fstream>
#include<chrono>
#include"quicksort.cpp"

using namespace std;



int main()
{
    ifstream inp_file;
    ofstream out_file;
    ofstream time_file;

    //First file
    int *arr1 = new int[100000];
    int *arr2 = new int[100000];
    //Iterative quick sort
    inp_file.open("file1.txt");

    for(int i=0;i<100000 ;i++)
    {
        inp_file>>arr1[i];
        inp_file>>arr2[i];

    }
    inp_file.close();
    out_file.open("iterative_quick_sorted_file1.txt");
    auto start = chrono::high_resolution_clock::now();
    iterQuicksort(arr1,0,99999);
    auto elapsed = chrono::high_resolution_clock::now() - start;
    double microseconds = (double)chrono::duration_cast<chrono::microseconds>(elapsed).count()/1000;
    time_file.open("unsorted_iterative_quick_sort_time1.txt");
    time_file<<microseconds;
    time_file.close();
    for(int i=0;i<100000;i++)
    {
        out_file<<arr1[i]<<"\r\n";
    }
    out_file.close();

    //Recursive quick sort
    out_file.open("recursive_quick_sorted_file1.txt");
    start = chrono::high_resolution_clock::now();
    recQuicksort(arr2,0,99999);
    elapsed = chrono::high_resolution_clock::now() - start;
    microseconds = (double)chrono::duration_cast<chrono::microseconds>(elapsed).count()/1000;
    time_file.open("unsorted_recursive_sort_time1.txt");
    time_file<<microseconds;
    time_file.close();
    for(int i=0;i<100000;i++)
    {
        out_file<<arr2[i]<<"\r\n";
    }
    out_file.close();

    return 0;
}  

quicksort.cpp :

void swap(int *a,int *b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}

int partition (int *arr, int low, int high) 
{ 
    int pivot = arr[high];    // pivot 
    int i = (low - 1);  // Index of smaller element 

    for (int j = low; j <= high- 1; j++) 
    { 
        // If current element is smaller than or 
        // equal to pivot 
        if (arr[j] <= pivot) 
        { 
            i++;    // increment index of smaller element 
            swap(&arr[i], &arr[j]); 
        } 
    } 
    swap(&arr[i + 1], &arr[high]); 
    return (i + 1); 
} 

void iterQuicksort(int *arr,int l, int h)
{ 

    int *stack = new int[h - l + 1]; 


    int top = -1; 


    stack[++top] = l; 
    stack[++top] = h; 


    while (top >= 0) { 

        h = stack[top--]; 
        l = stack[top--]; 


        int p = partition(arr, l, h); 


        if (p - 1 > l) { 
            stack[++top] = l; 
            stack[++top] = p - 1; 
        } 


        if (p + 1 < h) { 
            stack[++top] = p + 1; 
            stack[++top] = h; 
        } 
    } 
} 

void recQuicksort(int *arr,int l,int h)
{
    if(l<h)
    {
        int pivot =  partition(arr,l,h);
        recQuicksort(arr,l,pivot-1);
        recQuicksort(arr,pivot+1,h);
    }
}

command used for compiling:

g++ outputunsorted1.cpp -o outputunsorted1

The problem was with libstd++6.dll. It was solved by using the argument -static-libstdc++ in g++. MinGW was taking libstd++6.dll from Windows instead of the one in MinGW.

It's most likely that you have an old compiler version that does not yet natively support C++11. Try compiling with -std=c++11 . Otherwise update compiler.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM