Компиляция: включая библиотеку: неопределенная ссылка на `vtable для класса`

Я пытаюсь создать библиотеку с исходным файлом, а затем использовать эту библиотеку в моей программе. Но компоновщик выдает ошибку относительно vtable:

Ниже приведен код:

product.h
--------------------------------------------------------------
# ifndef PRODUCT_H_
#define PRODUCT_H_

# include <iostream>
# include <string>
using namespace std ;

class Product {
public:
virtual ~Product () {}
virtual string GetProductCode () = 0 ;
} ;
# endifnewproduct.h
--------------------------------------------------------------
# ifndef NEWPRODUCT_H_
#define NEWPRODUCT_H_

# include "product.h"# include <string>
using namespace std ;

class NewProduct : public Product {
public:
NewProduct () {cout<<"Creating New product"<<endl;}
virtual string GetProductCode () ;
} ;

# endif

newproduct.cc
--------------------------------------------------------------
# include "newproduct.h"
string NewProduct::GetProductCode () {
return "New Product" ;
}

main.cc
--------------------------------------------------------------
# include "product.h"# include "newproduct.h"# include <iostream>

using namespace std;
int main ()
{
Product * prod = new NewProduct ();
prod->GetProductCode () ;
delete prod ;
return 0;
}

Я пытаюсь выполнить следующие шаги:

1) экспорт LD_LIBRARY_PATH = $ LD_LIBRARY_PATH :.

2) g ++ -o libprodlib.so newproduct.o -shared

3) g ++ -o демо main.cc -L lprodlib.so

Но это дает мне ошибку:

/tmp/ccqI60q9.o: In function `NewProduct::NewProduct()':
main.cc:(.text._ZN10NewProductC2Ev[_ZN10NewProductC5Ev]+0x17): undefined reference to `vtable for NewProduct'
collect2: ld returned 1 exit status

Можете ли вы предложить, что происходит выше ??

Спасибо

0

Решение

Чтобы создать общий файл .so, вы можете сделать так:

$g++ -shared -fPIC newproduct.cc -o libprodlib.so
$g++ main.cc -o daemon -L ./ -lprodlib

Или даже проще:

$g++ -c newproduct.cc -o newproduct.o
$g++ main.cc -o daemon newproduct.o
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector