首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

linux so库调用外边的接口

2013-09-05 
linux so库调用外面的接口本帖最后由 jiuyueshouyi 于 2013-08-21 10:42:39 编辑写一个可执行文件来调用so

linux so库调用外面的接口
本帖最后由 jiuyueshouyi 于 2013-08-21 10:42:39 编辑 写一个可执行文件来调用so库中的接口很简单,不会有什么问题,现在碰到的情况是,可执行文件中定义了某个接口,这个接口在某个被它调用的so库中也是可见的(头文件开放给它),编译也没问题,实际运行的效果是一旦在so库中执行那个接口,就报找不到接口定义的错误,但实际上这个接口在可执行文件的符号表中是存在的,举例如下:
so库:
void test(){   // so库提供的接口,供外部调用
    fun();     // 外部提供的接口,在so库中调用
}

外部可执行程序:
test.h:
extern "C" void fun(){
    // ...
}

test.cpp:

void fun(){
   //...
}

int main()
{
    dlopen();
    dlsym();
    //call test()
}

以动态方式加载进来,一旦执行到call test()就会报找不到fun的定义,不知道是不是跟dlopen的方式有关,不过我尝试了多种加载方式,都未能解决问题,在fun()不单独写到另一个so库的情况下,不知道有有没有其他的办法可以解决这个问题?

[解决办法]
宿主程序使用 export-dynamic 选项进行链接可以导出定义在宿主中的符号给so

<http://bbs.chinaunix.net/thread-896123-2-1.html>

热点排行