ошибка компилятора c++ msys-1.0.dll windows

Я пытаюсь запустить простую программу, но получаю следующую ошибку компилятора: $./lab2/directory here/lab2.exe: ошибка при загрузке общих библиотек: msys-1.0.dll: невозможно открыть общий объектный файл: нет такого файла или каталога

вот мой makefile и код:


# CS240 Lab2 Makefile 

все: лаборатория2

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; 
}

Я пытаюсь выполнить часть B этого лабораторного занятия: http://cs.binghamton.edu/~sgreene/cs240-2010f/labs/lab2.html поэтому, если вы можете не только дать мне совет по поводу ошибки запуска exe, но и сказать мне, правильно ли я получаю часть B. Спасибо.


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. Поскольку каждый объект TenString требует, чтобы компилятор предоставил хранилище для десяти объектов TenString, он не может быть скомпилирован.

Попробуйте заменить «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