грешка на компилатора c++ msys-1.0.dll windows

Опитвам се да стартирам проста програма, но получавам следната грешка на компилатора: $./lab2 /директория тук/lab2.exe: грешка при зареждане на споделени библиотеки: msys-1.0.dll: не може да отвори споделен обектен файл: Няма такъв файл или директория

ето моя makefile и код:


# CS240 Lab2 Makefile 

всички: lab2

lab2: main.o tenstrings.o g++ main.o tenstrings.o -o lab2

main.o: main.cpp g++ -Wall -c main.cpp -o main.o

tenstrings.o: tenstrings.cpp g++ -Wall -c tenstrings.cpp -o tenstrings.o

tenstrings.h 

------------------------------------------------------------------------*/

#ifndef TENSTRNGS
#define TENSTRNGS

class TenStrings
{
public: 
    // Default Constructor
    TenStrings(); 
    TenStrings str[10];
};

#endif

    tenstrings.cpp 
--------------------------*/
#include "TenStrings.h"

using namespace std;

//Default Constructor
TenStrings::TenStrings()
{
private:

    str[0] = "String 1";
    str[1] = "String 2";
    str[2] = "String 3";
    str[3] = "String 4";
    str[4] = "String 5";
    str[5] = "String 6";
    str[6] = "String 7";
    str[7] = "String 8";
    str[8] = "String 9";
    str[9] = "String 10";

    std::cout << str[2] << std::endl;
}
;

    main.cpp 
--------------------------*/
#include "TenStrings.h"
#include <iostream>

int main()
{
    TenStrings varTen;


    return 0; 
}

Опитвам се да направя част Б от тази лаборатория: http://cs.binghamton.edu/~sgreene/cs240-2010f/labs/lab2.html, така че ако можете не само да ми дадете съвет относно грешката при стартиране на exe, но и да ми кажете дали разбирам правилно и част Б. Благодаря.


person user593301    schedule 06.02.2011    source източник
comment
между другото как форматирате, така че целият ви код да е в стандартите за препълване на стека, така че да е четлив? когато поставям кода си с помощта на етикетите на кода, той все още прави кода с различен размер на шрифта и е труден за четене.   -  person user593301    schedule 06.02.2011
comment
@user593301: Стъпка 1: Поставете кода. Стъпка 2: Изберете целия код. Стъпка 3: Щракнете върху иконата на кода в редактора (изглежда като чифт скоби). Алтернативно, просто отстъпете кодовия си фрагмент с четири интервала в любимия си текстов редактор.   -  person Billy ONeal    schedule 06.02.2011
comment
Изумен съм, че това компилира, честно казано - дефиницията на TenStrings изглежда рекурсивна и не мислех, че това е позволено.   -  person ReinstateMonica Larry Osterman    schedule 06.02.2011
comment
какво имаш предвид рекурсивно? Просто е празен тип, нали?   -  person user593301    schedule 06.02.2011
comment
@user593301: Не, това не е празен тип. Компилаторът трябва да резервира място за структурата TenStrings. Тъй като класът TenStrings съдържа екземпляр на клас TenStrings, всеки клас TenStrings трябва да разпредели място за съхранение за още десет обекта TenStrings. Което е рекурсивно и се раздува (на Visual Studio x86 съобщава, че обектът е по-голям от 2G и спира компилирането).   -  person ReinstateMonica Larry Osterman    schedule 08.02.2011


Отговори (2)


Това всъщност не е грешка на компилатора. Получавате грешка от вашата операционна система, когато стартирате програмата, казвайки, че не може да намери всички библиотеки, към които е свързана, а именно времето за изпълнение на mingw.

Mingw не инсталира тези dll файлове в system32 като някои други. Можете да разрешите проблема, като се уверите, че dll, за който получавате грешката, е във вашия PATH. Едно добро място е да го копирате (не го премествайте, разбира се) в директорията, съдържаща вашия exe.

person Edward Strange    schedule 06.02.2011

Написаният код не се компилира. Проблемът е, че вашият клас TenStrings съдържа масив TenStrings обекти. Тъй като всеки TenStrings изисква компилаторът да осигури съхранение за десет TenStrings обекта, той не може да компилира.

Опитайте да замените "TenStrings str[10]" със "std::string str[10]" и вижте как работи това.

Редактиране: Ако трябва да използвате указатели към знаци, опитайте "const char *str[10]".

person ReinstateMonica Larry Osterman    schedule 06.02.2011
comment
Всъщност домашното, върху което работи user593301, не позволява използването на std::string. Масивът трябва да бъде масив от символни указатели. (Да, знам...) - person Dan Breslau; 06.02.2011
comment
както и да е. в част c от лабораторията какво има предвид под Позволяване на потребителя на класа да зададе 10-те низа с помощта на редовно присвояване? Има ли предвид, че потребителят ще въведе низ? или класът в кода ще го определи? объркан в толкова много части - person user593301; 06.02.2011