Я прошел несколько сообщений о переполнении стека и попытался реализовать следующий пример, который использует dlopen с объектами C++. Класс У меня есть следующий код.Неопределенная ошибка ссылки при использовании объектов класса с C++
1) hello.cc Файл
#include <stdio.h>
#include "hello.h"
A::A() {
init1();
}
void A::init1() {
printf("\n init ");
}
2) Файл hello.h
#include <iostream>
class A {
public:
A();
void init1();
inline void fun() { cout << "\n Inside fun"; }
};
extern "C" A* createA() {
return new A;
}
}
3) Файл main.cpp
#include<iostream>
#include<dlfcn.h>
#include "hello.h"
using namespace std;
int main() {
void *handle;
handle = dlopen("./libhello.so", RTLD_LAZY | RTLD_GLOBAL);
if (!handle) {
cout << "The error is " << dlerror();
}
return 0 ;
}
Я используя следующие шаги для создания общей библиотеки
1) g++ -g -fPIC -c hello.cc
2) g++ -g -shared -o libhello.so hello.o
3) g++ -g -o myprog main.cpp -
main.cpp:(.text+0x18): undefined reference to `A::A()' . The function createA in hello.h is declared so the same can be used to dlsym
- Я не могу использовать createA в dlsym
- Я получаю неопределенную ссылку на `A :: A(), даже если я не использую dlsym
- Мой запрос является то, что правильно было использовать ++ объекты класса C в dlsym
- от человека dlopen я не могу сделать вывод, что значение RTLD_LAZY RTLD_GLOBAL RTLD_NOW флагов
C не может обрабатывать классы. –
Это код C++ – TechEnthusiast
'extern 'C" A * createA() 'явно говорит, что это не так. –