Итак, у меня есть 1 тестовое приложение и 1 библиотека, которая подключается к приложению. Проблема заключается в том, что, функции неопределенны, но я никак не могу понять почему. 1. Код тестового приложения: main.cpp
#include "log.h"
int main(int argc, char* argv[])
{
Log::Get()->Print("Test %d", 50);
delete Log::Get();
return 0;
}
и Makefile
CC=g++
LINK=g++
LIBARIES=-lDeka
CFLAGS= -c -O0 -std=c++14 -Wall -I ../SDL_DekaLib/include
LINKFLAGS= -O0 -std=c++14 -Wall -I ../SDL_DekaLib/include -L . $(LIBARIES)
all: main.o libDeka.a
$(LINK) $(LINKFLAGS) main.o -o test.exe
main.o: main.cpp
$(CC) $(CFLAGS) main.cpp -o main.o
libDeka.a: log.o
ar rc libDeka.a log.o
log.o: log.cpp
$(CC) $(CFLAGS) log.cpp -o log.o
clean:
del *.o
del *.exe
del *.a
ну и для галочки вывод в консоли
g++ -c -O0 -std=c++14 -Wall -I ../SDL_DekaLib/include main.cpp -o main.o
g++ -c -O0 -std=c++14 -Wall -I ../SDL_DekaLib/include log.cpp -o log.o
ar rc libDeka.a log.o
g++ -O0 -std=c++14 -Wall -I ../SDL_DekaLib/include -L . -lDeka main.o -o test.exe
main.o:main.cpp:(.text+0x10): undefined reference to `Log::Get()'
main.o:main.cpp:(.text+0x28): undefined reference to `Log::Print(char const*, ...)'
main.o:main.cpp:(.text+0x2d): undefined reference to `Log::Get()'
main.o:main.cpp:(.text+0x3a): undefined reference to `Log::~Log()'
Теперь библиотека. Она состоит только из логов:
log.h
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <clocale>
#include <cstdarg>
class Log
{
public:
Log();
~Log();
static Log* Get();
void Print(const char* message, ...);
void Debug(const char* message, ...);
void Error(const char* message, ...);
private:
static Log* _instance;
FILE* _file;
void _print(const char* lvltext, const char* message);
void _init();
void _close();
};
log.cpp - реализацию убрал, ибо не должна влиять на проблему, надеюсь.
#include "log.h"
Log* Log::_instance = nullptr;
void Log::_init()
{
...
}
void Log::_close()
{
...
}
Log::Log() : _file(nullptr)
{
_init();
}
Log::~Log()
{
_close();
_instance = nullptr;
}
Log* Log::Get()
{
if(!Log::_instance)
Log::_instance = new Log();
return Log::_instance;
}
void Log::Print(const char* message, ...)
{
...
}
void Log::Debug(const char* message, ...)
{
#ifdef DEBUG
...
#endif // DEBUG
}
void Log::Error(const char* message, ...)
{
...
}
void Log::_print(const char* lvltext, const char* message)
{
...
}
system("pause");дело происходит еще и в винде? – avp Jan 21 '17 at 13:25