Этот простой кусок кода действительно доставляет мне трудные времена, поэтому кто-нибудь может быть чем-то вроде и объяснить мне, что может быть не так? У меня есть простой файл cpp, который использует класс из заголовочного файла.
lib.h
namespace tnamespace {
class base{
virtual ~base() {};
};
class test/*: public base*/ {
public:
test();
test();
};
}
lib.cxx
#include "lib.h"
namespace tnamespace{
test::test() {};
test::~test() {}
}
start.cpp
#include <iostream>
#include <lib.h>
int main() {
tnamespace::test d;
return 0;
}
я использую gcc версии 4.1.2 20080704 и компилирую проект с
g++ start.cpp -I./ext_lib -Wall
получил следующую ошибку компоновщика
/tmp/ccK2v6GD.o: В функции `main ‘:
start.cpp :(. text + 0x7a): неопределенная ссылка на `tnamespace :: test :: test () ‘
start.cpp :(. text + 0x88): неопределенная ссылка на `tnamespace :: test :: ~ test () ‘
collect2: ld вернул 1 статус выхода
мне удалось найти решение. Я забыл собрать мою библиотеку. Правильная команда g ++
g ++ start.cpp ext_lib / lib.cxx -I./ext_lib -Wall
Вы не скомпилировали lib.cxx
, поэтому символы не экспортируются.
g++ start.cpp lib.cxx -I./ext_lib -Wall
Других решений пока нет …