使用 mingw g++ 编译后 运行 c++ .exe 文件上未找到入口点错误
Entry Point Not Found Error on running c++ .exe file after compiling with mingw g++
我正在使用最新的 MinGW 在 Windows 10 上使用 g++ 编译器编译我的 c++ 代码。代码编译没有错误但是当我 运行 执行文件时它给出了错误:The procedure entry point _ZNSt6chrono3_V212system_clock3nowEv could not be located in the dynamic link library A:\Code\DAA Assignments\outputunsorted1.exe
令人困惑的部分是相同的代码 运行 在用 cygwin 编译时完全没问题,但仅在 MinGW 中出现此错误。我还多次尝试重新安装 MinGW。我检查了 MinGW 文件夹,它确实有 chrono 库,为什么找不到入口点。另一个奇怪的事情是错误的结尾说 "in dynamic link library A:\Code\DAA Assignments\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
您的编译器版本很可能还不支持 C++11。尝试使用 -std=c++11
进行编译。否则更新编译器。
问题出在 libstd++6.dll 上。它是通过在 g++ 中使用参数 -static-libstdc++
解决的。 MinGW 从 Windows 中获取 libstd++6.dll 而不是 MinGW 中的那个。
我正在使用最新的 MinGW 在 Windows 10 上使用 g++ 编译器编译我的 c++ 代码。代码编译没有错误但是当我 运行 执行文件时它给出了错误:The procedure entry point _ZNSt6chrono3_V212system_clock3nowEv could not be located in the dynamic link library A:\Code\DAA Assignments\outputunsorted1.exe
令人困惑的部分是相同的代码 运行 在用 cygwin 编译时完全没问题,但仅在 MinGW 中出现此错误。我还多次尝试重新安装 MinGW。我检查了 MinGW 文件夹,它确实有 chrono 库,为什么找不到入口点。另一个奇怪的事情是错误的结尾说 "in dynamic link library A:\Code\DAA Assignments\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
您的编译器版本很可能还不支持 C++11。尝试使用 -std=c++11
进行编译。否则更新编译器。
问题出在 libstd++6.dll 上。它是通过在 g++ 中使用参数 -static-libstdc++
解决的。 MinGW 从 Windows 中获取 libstd++6.dll 而不是 MinGW 中的那个。