【问题标题】:compiler error c++ msys-1.0.dll windows编译器错误 c++ msys-1.0.dll windows
【发布时间】:2011-02-06 06:38:44
【问题描述】:

我正在尝试运行简单的程序,但得到以下编译器错误: $./lab2 /directory here/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; 
}

我正在尝试做这个实验的 B 部分:http://cs.binghamton.edu/~sgreene/cs240-2010f/labs/lab2.html 因此,如果您不仅可以就运行中的 exe 错误给我建议,还可以告诉我我是否也正确地理解了 B 部分。谢谢。

【问题讨论】:

  • 顺便说一句。你如何格式化所有代码都在堆栈溢出标准中,所以它清晰易读?当我使用代码标签粘贴我的代码时,它仍然使代码不同的字体大小并且难以阅读。
  • @user593301:第 1 步:粘贴代码。第 2 步:选择所有代码。第 3 步:单击编辑器中的“代码”图标(它看起来像一对大括号)。或者,只需在您喜欢的文本编辑器中将您的代码 sn-p 缩进四个空格。
  • 我很惊讶这个编译,老实说 - TenStrings 的定义似乎是递归的,我认为这是不允许的。
  • 你的意思是它的递归?它只是一个空类型吗?
  • @user593301:不,它不是空类型。编译器需要为 TenStrings 结构保留空间。由于 TenStrings 类包含一个 TenStrings 类实例,因此每个 TenStrings 类需要为另外十个 TenStrings 对象分配存储空间。这是递归的并且会爆炸(在visual studio x86上,它报告对象大于2G并停止编译)。

标签: c++ windows-7 makefile compiler-errors


【解决方案1】:

这实际上不是编译器错误。当您运行程序时,您的操作系统会收到一个错误,提示它无法找到它链接到的所有库,即 mingw 运行时。

Mingw 不像其他一些那样在 system32 中安装这些 dll。您可以通过确保您收到错误的 dll 在您的 PATH 中来解决问题。一个好地方是将它(当然不要移动它)复制到包含您的 exe 的目录中。

【讨论】:

    【解决方案2】:

    编写的代码无法编译。问题是您的 TenStrings 类包含一个数组 TenStrings 对象。由于每个 TenStrings 都要求编译器为十个 TenStrings 对象提供存储空间,因此无法编译。

    尝试将“TenStrings str[10]”替换为“std::string str[10]”,看看效果如何。

    编辑:如果您必须使用指向字符的指针,请尝试“const char *str[10]”。

    【讨论】:

    • 实际上,user593301 正在处理的家庭作业不允许使用 std::string。该数组需要是一个 char 指针数组。 (是的,我知道...)
    • 无论如何。在实验室的 c 部分中,“允许班级用户使用常规分配设置 10 个字符串”是什么意思?他的意思是用户将输入一个字符串吗?或者代码中的类将确定它?在很多部分感到困惑
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多