I use these two files here and here .
I created the class in two separate files:
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
and modul1.cpp
#include "modul1.h"
Modul1::Modul1(std::string name):log(new easylogger::Logger(name))
{
}
Now I want to use this class in another file (main.cpp):
#include "modul1.h"
int main()
{
std::cout << "Hello world!" << std::endl;
Modul1 mod1("test.log");
return 0;
}
When I compile it with the following Makefile, I get the error "multiple definition ...":
g++ main.o modul1.o -o main modul1.o: 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:(. + 0x0): modul1.o: easylogger::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 *, charconst *) 'main.o: main.cpp:(. text + 0x2a): collect2: ld 1
( :: blocks )
Modul1, ? , , Ubuntu 64bit 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