C++ 获取矮人错误版本';4';
我在学校的项目上遇到了一些麻烦。我认为这可能是我使用指针时的一个错误,但我不确定为什么会出现这个错误。这段代码是不完整的,但我正在尝试一路测试它。你知道我为什么会犯这个错误吗?这是什么意思?谢谢 来自Cygwin终端的错误C++ 获取矮人错误版本';4';,c++,C++,我在学校的项目上遇到了一些麻烦。我认为这可能是我使用指针时的一个错误,但我不确定为什么会出现这个错误。这段代码是不完整的,但我正在尝试一路测试它。你知道我为什么会犯这个错误吗?这是什么意思?谢谢 来自Cygwin终端的错误 -bash-3.2$ make clean rm -rf *.o simulate -bash-3.2$ make simulate g++ -c -g Main.cpp g++ -c -g Maze.cpp g++ Main.o Maze.o -o simulate /us
-bash-3.2$ make clean
rm -rf *.o simulate
-bash-3.2$ make simulate
g++ -c -g Main.cpp
g++ -c -g Maze.cpp
g++ Main.o Maze.o -o simulate
/usr/bin/ld: Dwarf Error: found dwarf version '4', this reader only handles version 2 information.
Maze.o: In function `Maze::createMaze(char*)':
Maze.cpp:(.text+0x49): undefined reference to `Node::Node(char)'
collect2: error: ld returned 1 exit status
make: *** [simulate] Error 1
Main.cpp
#include <iostream>
#include <fstream>
#include <string>
#include "Maze.h"
using namespace std;
int main()
{
int array_size = 1024;
char * mazeArray = new char[array_size];
int position = 0;
string mazeName;
Maze Maze1;
cout << "Enter the name of the maze file: ";
getline(cin, mazeName);
ifstream fin(mazeName.c_str());
//File opened successfully
if(fin.is_open())
{
while(!fin.eof() && position < array_size)
{
fin.get(mazeArray[position]); //reading one character from file to mazeArray
position++;
}
mazeArray[position-1] = '\0'; //placing character mazeArray terminating character
for(int i = 0; mazeArray[i] != '\0'; i++){
if(isspace(mazeArray[i]))
mazeArray[i] = mazeArray[i+1];
}
cout << "Displaying mazeArray..." << endl << endl;
//this loop display all the charaters in mazeArray till \0
for(int i = 0; mazeArray[i] != '\0'; i++)
{
cout << mazeArray[i];
}
cout << endl;
Maze1.createMaze(mazeArray);
}
else //file could not be opened
{
cout << "File could not be opened." << endl;
}
return 0;
}
问题不在代码本身 一个问题是链接命令失败,因为您没有链接所有对象文件。您需要链接
Main.o
、Maze.o
和Node.o
来创建可执行文件:
g++ Main.o Maze.o Node.o -o simulate
另一个问题是编译器比链接器更新。编译器正在使用Dwarf版本4生成调试信息,但您的链接器(/usr/bin/ld
)只理解Dwarf版本2
/usr/bin/ld: Dwarf Error: found dwarf version '4', this reader only handles
version 2 information.
您需要将链接器更新到与正在使用的编译器兼容的新版本
或者,正如a中所建议的,您可以在编译行和链接行中使用-gdwarf-2
。在生成文件中
:
CFLAGS = -c -gdwarf-2
FILES.cpp = Main.cpp Maze.cpp Node.cpp
FILES.o = $(FILES.cpp:.cpp=.o}
simulate: $(FILES.o)
$(CC) $(CFLAGS) $(FILES.o) -o $@
(在makefile
中,命令行中应该有一些不是宏调用的部分;这样您就可以更轻松地更改所有内容。)
您需要删除Dwarf-4对象文件并重新编译以避免出现错误/警告。一个问题是您没有将
Node.cpp
添加到makefile中Main.cpp
和Maze.cpp
生成但不生成Node.cpp
。或者,在OP使用的GCC系列编译器中,-gdwarf-2可以在不想更新ld的情况下工作。@janneb:Oh-有趣。谢谢
#include <iostream>
#include <string>
#include <vector>
#include "Node.h"
using namespace std;
Node::Node(char name) : name(name) {
}
void Node::setNodeName(char tempName){
name = tempName;
}
void Node::attachNewNode(Node temp, int direction){
attachedNodes[direction] = temp;
}
Node Node::getAttachedNode(int direction){
return attachedNodes[direction];
}
#!/bin/bash
#file:makefile
CC = g++
CFLAGS = -c -g
simulate: Main.o Maze.o
$(CC) Main.o Maze.o -o simulate
Main.o: Main.cpp Maze.h
$(CC) $(CFLAGS) Main.cpp
Maze.o: Maze.cpp Menu.h Node.h
$(CC) $(CFLAGS) Maze.cpp
Node.o: Node.cpp Node.h
$(CC) $(CFLAGS) Node.cpp
clean:
rm -rf *.o simulate
g++ Main.o Maze.o Node.o -o simulate
/usr/bin/ld: Dwarf Error: found dwarf version '4', this reader only handles
version 2 information.
CFLAGS = -c -gdwarf-2
FILES.cpp = Main.cpp Maze.cpp Node.cpp
FILES.o = $(FILES.cpp:.cpp=.o}
simulate: $(FILES.o)
$(CC) $(CFLAGS) $(FILES.o) -o $@