Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
420 views
in Technique[技术] by (71.8m points)

cygwin - 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:CodeDAA Assignments2outputunsorted1.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:CodeDAA Assignments2outputunsorted1.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]<<"
";
    }
    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]<<"
";
    }
    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
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...