我想从Linux上的C ++库调用一个函数。我有该库的共享对象。
我想调用从ydmg库返回int的方法getAge()。
以下是我编写的代码:
睾丸
#include "ydmg/bd.h"
#include "yut/hash.h"
#include "dlfcn.h"
extern "C" int getAge();
class testydmg{
public:
testydmg::testydmg(const yutHash& user){
}
testydmg::testydmg(){
}
testydmg::~testydmg(){
}
int testydmg::getFunction(){
void *handle;
int (*voidfnc)();
handle = dlopen("ydmg.so",RTLD_LAZY);
if(handle == NULL){
printf("error in opening ydmg lib");
} else {
voidfnc = (int (*)())dlsym(handle, "getAge");
(*voidfnc)();
printf("class loaded");
}
ydmgBd obj;
obj.getAge();
printf("Inside getFunction()...");
dlclose(handle);
}
};
我编译并链接如下代码:
gcc -fPIC -shared -l stdc ++ -I / home / y / libexec64 / jdk1.6.0 / include -I / home / y / libexec64 / jdk1.6.0 / include / linux -I / home / y / include testydmg.cpp- o libTestYdmg.so libydmg.so
然后我在新的共享库中检查方法,即libTestYdmg.so
nm -C libTestYdmg.so | egrep getAge
通过运行上面的命令,我什么也没得到。
这是否意味着它没有从库中获取方法getAge()。
您能纠正我要去的地方吗?
最佳答案
您想使用ydmgDB::getAge()
,但您要向库索取getAge()
。这是不正确的,仅创建一个ydmgDB
对象并调用其方法getAge()
而不加载与您的编译命令行链接的库即可。
您不需要dlopen
库。
此外,getAge
并未真正包含在libTestYdmg.so
中。您必须使用以下命令在libydmg.so
中查找它:
nm -C libydmg.so | grep getAge