неопределенная ссылка на B::B & B::~B

Я постоянно получаю жалобы от компилятора g++, что следующий код имеет проблемы. После тщательного осмотра,Я до сих пор не могу понять, почему он не может найти конструктор и деструктор класса B из embedMain.cpp.

Может ли кто-нибудь дать мне небольшую подсказку?

Спасибо

// embedMain.cpp
#include "embed.h"

int main(void)
{
  B b("hello world");
  return 0;
}

,

// embed.h
#ifndef EMBED_H
#define EMBED_H
#include <string>

class B
{
public:
  B(const std::string& _name);
  ~B();
private:
  std::string name;
};
#endif

,

// embed.cpp

#include <iostream>
#include <string>
#include "embed.h"

B::B(const std::string& _name) : name(_name) {}

B::~B() {
  std::cout << "This is B::~B()" << std::endl;
}

,

~/Documents/C++ $ g++ --version
g++ (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2

~/Documents/C++ $ g++ -o embedMain embedMain.cpp 
/tmp/ccdqT9tn.o: In function `main':
embedMain.cpp:(.text+0x42): undefined reference to `B::B(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
embedMain.cpp:(.text+0x6b): undefined reference to `B::~B()'
embedMain.cpp:(.text+0x93): undefined reference to `B::~B()'
collect2: ld returned 1 exit status

// Обновлено //

Основываясь на комментариях экспертов здесь, я нашел правильный способ связать embedMain.cpp с библиотекой embed.

Вот шаг детализации:

user@ubuntu:~/Documents/C++$ tree
.
├── embed.cpp
├── embed.h
├── embedMain.cpp

user@ubuntu:~/Documents/C++$ g++ -Wall -c embed.cpp
user@ubuntu:~/Documents/C++$ ar -cvq libembed.a embed.o
user@ubuntu:~/Documents/C++$ g++ -o embedMain embedMain.cpp -L/home/user/Documents/C++ -lembed
user@ubuntu:~/Documents/C++$ tree
.
├── embed.cpp
├── embed.h
├── embedMain
├── embedMain.cpp
├── embed.o
├── libembed.a
5
задан q0987 30 November 2011 в 16:28
поделиться