使用mingw g++编译后运行C++ .exe文件时出现入口点未找到的错误

3
我正在使用最新的MinGW编译器在Windows 10上编译我的C++代码。代码编译没有错误,但当我运行可执行文件时,它会给出以下错误:The procedure entry point _ZNSt6chrono3_V212system_clock3nowEv could not be located in the dynamic link library A:\Code\DAA Assignments\2\outputunsorted1.exe 令人困惑的是,当使用cygwin编译相同的代码时,它完全可以正常运行,但只有在MinGW中才会出现此错误。我尝试了多次重新安装MinGW,检查了MinGW文件夹,发现其中确实包含chrono库,那么为什么它找不到入口点呢?另一个奇怪的问题是错误的结尾说“在动态链接库A:\ Code \ DAA Assignments \ 2 \ outputunsorted1.exe”这是我的可执行文件的地址,那么为什么程序把它称为库呢?
我的cpp代码:
#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);
    }
}

用于编译的命令:

g++ outputunsorted1.cpp -o outputunsorted1

@john 我发布了它。但有人无缘无故地给它点了踩。 - Shantanu Shinde
1
@kiner_shah,它实际上包含在第一个文件中(这显然是错误的,但在这种情况下有点起作用)。 - user7860670
1
@kiner_shah 实际上不是这样的,因为 main.cpp 包含了 quicksort.cpp。这显然是不好的实践,但并不是错误。 - john
1
@ShantanuShinde,我找到了一个关于类似问题的链接:链接 - kiner_shah
1
@kiner_shah,程序正在运行,但现在在递归快速排序部分完成之前就关闭了。它运行到recQuicksort函数,然后没有任何错误就关闭了。为什么会这样? - Shantanu Shinde
显示剩余18条评论
2个回答

10

问题出在libstd++6.dll上。通过在g++中使用参数-static-libstdc++解决了该问题。MinGW使用的是Windows中的libstd++6.dll而不是MinGW中的。


0

很可能你使用的是旧版本编译器,还不支持C++11标准。尝试使用-std=c++11进行编译。否则请升级编译器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接