首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Linux中的C++库调用C++函数

问从Linux中的C++库调用C++函数
EN

Stack Overflow用户
提问于 2011-10-31 06:31:53
回答 2查看 995关注 0票数 0

我想从linux上的C++库中调用一个函数。我有一个图书馆的共享对象。我想调用从ydmg库返回int的方法getAge()。

以下是我所写的代码:

testydmg.cpp

代码语言:javascript
复制
#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/linux 64/gcc 1.6.0/include-i/home/y/libexec64 64/gcc 1.6.0/include/linux -I/home/y/include testydmg.cpp -o libTestYdmg.so libydmg.so

然后在新的共享对象(即libTestYdmg.so )中检查方法

nm,-C,libTestYdmg.so,egrep,getAge,我通过运行上面的命令一无所获。

这是否意味着它没有从库中获得getAge()方法。你能纠正一下我哪里出错了吗?

EN

回答 2

Stack Overflow用户

发布于 2011-10-31 07:04:15

您希望使用ydmgDB::getAge(),但您正在向库请求getAge()。这是不正确的,只需创建一个ydmgDB对象并调用它的方法getAge(),而不加载与编译命令行链接的库。

你不需要dlopen库。

此外,getAge并没有真正包含在libTestYdmg.so中。您必须使用以下方法在libydmg.so中查找它:

代码语言:javascript
复制
nm -C libydmg.so | grep getAge
票数 2
EN

Stack Overflow用户

发布于 2011-10-31 07:58:03

如果您对在C++代码中实际使用dlopen感兴趣,请查看C++ dlopen迷你指南,其中包括示例代码和一些可能重要的警告。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7950570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档