-3
我已通過多個堆棧溢出職位消失,試圖執行下面的例子與C++對象類 我具有以下的代碼使用的dlopen類對象。未定義參考誤差時用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()'明確表示它不是。 –