我用這兩個文件here和here。爲什麼鏈接時會出現多重定義錯誤?
我創建了一個類中兩個單獨的文件:
modul1.h
#ifndef MODUL1_H
#define MODUL1_H
#include <iostream>
#include <fstream>
#include "easylogger.h"
class Modul1
{
public:
Modul1(std::string name);
protected:
private:
easylogger::Logger *log;
};
#endif // MODUL1_H
和modul1.cpp
#include "modul1.h"
Modul1::Modul1(std::string name):log(new easylogger::Logger(name))
{
//ctor
//std::ofstream *f = new std::ofstream(name.c_str(), std::ios_base::app);
//log->Stream(*f);
//log->Level(easylogger::LEVEL_DEBUG);
//LOG_DEBUG(*log, "ctor ende!");
}
現在我想在另一個文件中使用這個類(主.cpp):
#include "modul1.h"
int main()
{
std::cout << "Hello world!" << std::endl;
Modul1 mod1("test.log");
return 0;
}
當我用下面的Makefile編譯它,我得到一個「的多個定義...」錯誤:
g++ main.o modul1.o -o main modul1.o: In function
easylogger::Logger::Format(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': modul1.cpp:(.text+0x0): multiple definition of
easylogger::Logger::Format(std::basic_string, std::allocator > const&)' main.o:main.cpp:(.text+0x0): first defined here modul1.o: In functioneasylogger::Logger::WriteLog(easylogger::LogLevel, easylogger::Logger*, char const*, unsigned int, char const*, char const*)': modul1.cpp:(.text+0x2a): multiple definition of
easylogger::Logger::WriteLog(easylogger::LogLevel, easylogger::Logger*, char const*, unsigned int, char const*, char const*)' main.o:main.cpp:(.text+0x2a): first defined here collect2: ld returned 1 exit status
(起初我與代碼::塊編譯,並得到了同樣的錯誤)
如何修改我的Modul1以免出現鏈接錯誤?我不認爲這是很重要的,但我使用Ubuntu的一些與64位G ++ 4.4.3
的Makefile:
CC=g++
CFLAGS=-c -Wall
all: log_test
log_test: main.o easylogger.h modul1.o
$(CC) main.o modul1.o -o main
main.o: main.cpp modul1.h
$(CC) $(CFLAGS) main.cpp
modul1.o: modul1.cpp modul1.h
$(CC) $(CFLAGS) modul1.cpp
爲什麼寫一整頁,但沒有發佈完整的錯誤信息? – 2012-03-31 20:47:54
多重定義...什麼?這裏的「什麼」是最重要的部分。 – Cornstalks 2012-03-31 20:51:50
另外,爲什麼main.o引用modul1.cpp? – Cornstalks 2012-03-31 20:52:58