繁体   English   中英

运行 exe 时找不到入口点 - C++

[英]Entry point not found when running exe - C++

我正在尝试运行一个包含 C++ 代码的 exe,但它一直给我一个“找不到入口点”的错误。

首先,这是一项基于先前作业的解决方案的家庭作业。 我按原样编译并尝试运行生成的 exe,但我遇到了同样的问题。

下面是我下载的代码。

#include <iostream> //for cout, cin
#include <iomanip> // for setw, fixed, setprecision() manipulators
#include <fstream> //for file input/output
#include <string.h> //for string types usage
#include <cstdlib>
using namespace std;

/*
Structure to store the date
*/
struct Date
{
int month;
int day;
int year;
};

/*
Structure to store Vehicle Options
*/
struct Option
{
string seatMaterial;
int wheelSize;
string stereo;
string winterPackage;
};

/*
Structure to store Vehicles data
*/
struct Vehicle
{
int ID;
string name;
int cylinder;
string trans;

Date manufDate;
Date shipDate;

Option vehicleOptions;

char receiverFlag; // I or D

//for individuals
string ind_first, ind_last, ind_address;

//for dealers
int deal_zip;


};

Vehicle* readVehicleFromFile(int &totalVehicles);
void menu(Vehicle *vehicle, int totalVehicle);
void printHorizontalLine(int width, char border_char );
void printVehicle(Vehicle *vehicle, int totalVehicle, char flags);

/*
* Entry point
*/
int main()
{
Vehicle *allVehicle;
int totalVehicle = 0;
allVehicle = readVehicleFromFile(totalVehicle);

if( allVehicle == NULL )
{
    cout << "allVehicle is NULL" << endl;
    return 0;
}

printVehicle(allVehicle, totalVehicle, ' ');
menu(allVehicle, totalVehicle);

return 0;
}



/*
* Responsible for reading Vehicle records from vehicles.txt into Vehicle     array of structs
*
*
* @param totalVehicle: reference variable which post execution, contains size of Vehicle
* @param return: pointer pointing to the array of structs containing Vehicle data
*/
Vehicle* readVehicleFromFile(int &totalVehicle)
{
char delimiter;
Vehicle *allVehiclePointer;
//input stream for Vehicle data
ifstream allVehicleInFile;

//open Vehicles file
allVehicleInFile.open("vehicles.txt");

//error handling in case file does not exist - start
if( !allVehicleInFile )
{
    cout << "Error opening vehicles.txt" << endl;
    return NULL;
}
//error handling in case file does not exist - end
cout << "Success opening vehicles.txt" << endl;
allVehicleInFile >> totalVehicle;
allVehiclePointer = new Vehicle[totalVehicle];

cout << "totalVehicles: " << totalVehicle << endl;

for(int i = 0; i < totalVehicle; i++)
{
    allVehicleInFile >> allVehiclePointer[i].ID;
    allVehicleInFile >> allVehiclePointer[i].name;
    allVehicleInFile >> allVehiclePointer[i].cylinder;
    allVehicleInFile >> allVehiclePointer[i].trans;
    //get dates
    allVehicleInFile >> allVehiclePointer[i].manufDate.month;
    allVehicleInFile >> delimiter; //delimiter = ':'
    allVehicleInFile >> allVehiclePointer[i].manufDate.day;
    allVehicleInFile >> delimiter;
    allVehicleInFile >> allVehiclePointer[i].manufDate.year;

    allVehicleInFile >> allVehiclePointer[i].shipDate.month;
    allVehicleInFile >> delimiter;
    allVehicleInFile >> allVehiclePointer[i].shipDate.day;
    allVehicleInFile >> delimiter;
    allVehicleInFile >> allVehiclePointer[i].shipDate.year;
}
allVehicleInFile.close();

int dummyID = 0;
allVehicleInFile.open("options.txt");
//read vehicle options
for (int j = 0; j < totalVehicle; j++){
    allVehicleInFile >> dummyID;
   // if (dummyID == 20)
     //   dummyID = 0;
    allVehicleInFile >>      allVehiclePointer[dummyID].vehicleOptions.seatMaterial;
    allVehicleInFile >> allVehiclePointer[dummyID].vehicleOptions.wheelSize;
    allVehicleInFile >> allVehiclePointer[dummyID].vehicleOptions.stereo;
    allVehicleInFile >> allVehiclePointer[dummyID].vehicleOptions.winterPackage;
}

allVehicleInFile.close();
allVehicleInFile.open("owner.txt");
//read owner information
for (int k = 0; k < totalVehicle; k++){
    allVehicleInFile >> dummyID;
    //if (dummyID == 20)
      //dummyID = 0;
    allVehicleInFile >> allVehiclePointer[dummyID].receiverFlag;

    if (allVehiclePointer[dummyID].receiverFlag == 'D') //this is a dealer vehicle
        allVehicleInFile >> allVehiclePointer[dummyID].deal_zip;
    else{ // this is an individual's vehicle
        allVehicleInFile >> allVehiclePointer[dummyID].ind_first;
        allVehicleInFile >> allVehiclePointer[dummyID].ind_last;
        getline(allVehicleInFile, allVehiclePointer[dummyID].ind_address);
    }
}
allVehicleInFile.close();

return allVehiclePointer;
}


/*
 * Responsible for printing menu and handling user selection
 *
 *
 * @param Vehicle: pointer pointing to the array of structs containing Hospital Personnel data
 * @param totalVehicle: size of Vehicle
 */

void menu(Vehicle *vehicle, int totalVehicle)
{
int input;
while( true )
{
    cin >> input;
    switch( input )
    {
        case 0:
            // 0 - print all vehicles
            printVehicle(vehicle, totalVehicle, ' ');
            break;
        case 1:
            // 1 - print only vehicles manufactured for dealers
            printVehicle(vehicle, totalVehicle, 'D');
            break;
        case 2:
            // 2 - print only vehicles manufactured for individuals
            printVehicle(vehicle, totalVehicle, 'I');
            break;
        case 3:
            // 3 - print only vehicles with 4 cylinder engines
            printVehicle(vehicle, totalVehicle, '4');
            break;
        case 4:
            // 4 - print only vehicles with premium stereos
            printVehicle(vehicle, totalVehicle, 'P');
            break;
        case 5:
            // 5 - print only vehicles with leather seats
            printVehicle(vehicle, totalVehicle, 'L');
            break;
        case 6:
            // 6 - exit
            exit(0);
    }

}
}

/*
 * Responsible for printing the Vehicle array of structs
 *
 *
 * @param vehicle: pointer pointing to the array of structs containing Vehicle data
 * @param totalVehicle: size of vehicle
 */
void printVehicle(Vehicle *vehicle, int totalVehicle, char flags){

if(vehicle == NULL || totalVehicle < 1 )
{
    return;
}

cout << endl;
printHorizontalLine(85, '*');
printHorizontalLine(85, '*');
for(int i = 0; i < totalVehicle; i++)
{

    if( flags != ' ' )
    {
        if( (flags == 'I' && vehicle[i].receiverFlag != 'I') || (flags == 'D' && vehicle[i].receiverFlag != 'D') || (flags == 'L' && vehicle[i].vehicleOptions.seatMaterial != "Leather") || (flags == '4' && vehicle[i].cylinder != 4) || (flags ==  'P' && vehicle[i].vehicleOptions.stereo != "Premium"))
        {
            // skip roles which do not match roleFlag
            continue;
        }
    }
    // filter - end

    cout.clear();
    cout.fill(' ');

    cout
    << left
    << setw(3)
    << i
    << left << setw(10)
    << vehicle[i].name
    << left << setw(3)
    << vehicle[i].cylinder

    << left << setw(10)
    << vehicle[i].trans
    << left
    << vehicle[i].manufDate.month << ':' << vehicle[i].manufDate.day << ':' << vehicle[i].manufDate.year
    << left << "\t"
    << vehicle[i].shipDate.month << ':' << vehicle[i].shipDate.day << ':' << vehicle[i].shipDate.year
    << "\t" ;

    //print options
    cout << left << setw(10)
    << vehicle[i].vehicleOptions.seatMaterial
    << left << setw(5)
    << vehicle[i].vehicleOptions.wheelSize
    << left << setw(10)
    << vehicle[i].vehicleOptions.stereo
    << left << setw(5) << vehicle[i].vehicleOptions.winterPackage;

    cout << left << setw(3) << vehicle[i].receiverFlag;

    if (vehicle[i].receiverFlag == 'D')
        cout << left << setw(7) << vehicle[i].deal_zip;
    else
        cout << left << setw(3)
        << vehicle[i].ind_first << " " << vehicle[i].ind_last
        << "   "
        << vehicle[i].ind_address;

    cout << endl;
}
printHorizontalLine(85, '*');
printHorizontalLine(85, '*');
cout << endl;
cout << "0 - Print all vehicles" <<endl;
cout << "1 - Print only vehicles manufactured for dealers" << endl;
cout << "2 - Print only vehicles manufactured for individuals" << endl;
cout << "3 - Print only vehicles with 4 cylinder engines" << endl;
cout << "4 - Print only vehicles with premium stereos" << endl;
cout << "5 - Print only vehicles with leather seats" << endl;
cout << "6 - Exit: ";
}


/*
 * Responsible for printing a horizontal line which consists of border_char     characters
 * 
 *
 * @param width: count of border_char
 * @param border_char: width made out of characters
 */
void printHorizontalLine( int width, char border_char )
{
cout.fill( border_char );
cout << setw( width ) << border_char << "\n";
cout.fill(' ');
}

在试图找到问题的根源时,我隔离了代码并对其进行了试验。 我发现当我取消注释这两段代码时,它就崩溃了。

(flags == 'L' && vehicle[i].vehicleOptions.seatMaterial != "Leather")
(flags ==  'P' && vehicle[i].vehicleOptions.stereo != "Premium")

这是错误的全文:“程序入口点_ZNKSt7_cxx1112basic_stringlcSt11char_traitslcESalcEE7compareEPKc 无法位于动态链接库C:\\Users\\Zach\\Documents\\College - Spring 2017\\CS 250\\AssignmentVehicle\\Solution\\Solution调试\\Vehicles.exe"

同样的麻烦,PATH 已经设置好了。 我只是将 libstdc++-6.dll 复制到我的 .exe 文件夹中,它的工作原理

找到包含libstdc++-6.dll的目录并将其添加到您的PATH变量中。

  1. 打开命令提示符
  2. 运行set PATH=%PATH%;YOUR_PATH_HERE

您还可以静态链接到 libstdc++。 对于Code::Blocks你可以检查这个问题

或使用命令行构建它:

g++ -c -o main.o main.cpp 
g++ -o main.exe main.o -static-libstdc++

如果添加到路径不起作用但将libstdc++-6.dll放入程序文件夹中,那么您可能与路径发生冲突,请尝试在您的环境变量中搜索带有mingw-w64或类似路径的路径,然后留下一个。

例如,在我的情况下,我的电脑中安装了Anacondamingw-w64 ,并且在环境变量中, Anaconda有一个mingw-w64的二进制文件夹。

类似于: C:\\Users\\user\\anaconda3\\Library\\mingw-w64\\bin

我删除了它,只留下mingw-w64二进制文件路径,我所有的OpenCV程序都可以正常运行。 我希望这对某人有帮助,问候!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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