当前位置: 技术问答>linux和unix
关于动态库调用(方法名相同如何解决)
来源: 互联网 发布时间:2016-06-14
本文导语: 现在要做一个动态链接库假设名为 father.so,库中有一方法名为void add()。 而father.so需要调用另一个动态链接库假设名为son.so。而该库也有一名为void add()的方法。 代码中如何区分这两个方法? 小弟不才,不知如...
现在要做一个动态链接库假设名为 father.so,库中有一方法名为void add()。
而father.so需要调用另一个动态链接库假设名为son.so。而该库也有一名为void add()的方法。
代码中如何区分这两个方法?
小弟不才,不知如何解决。晚各位前辈不吝赐教。最好能有示例代码,不胜感激,再拜。
而father.so需要调用另一个动态链接库假设名为son.so。而该库也有一名为void add()的方法。
代码中如何区分这两个方法?
小弟不才,不知如何解决。晚各位前辈不吝赐教。最好能有示例代码,不胜感激,再拜。
|
7.4. Writing programs with dynamic loading
如果你对solaris 2.x下使用动态加载熟悉的话,会发现linux下要做的工作与
solaris非常接近。man 3 dlopen查看更多信息。下面是一个简单有效的例子,
链接时需要 -ldl 开关。
[scz@ /home/scz/src]> cat > dlopentest.c
#include
#include
int main ( int argc, char * argv[] )
{
void * libc;
void ( * printf_call ) ();
if ( ( libc = dlopen( "/lib/libc.so.6", RTLD_LAZY ) ) != 0 )
{
printf_call = dlsym( libc, "printf" );
( *printf_call )( "hello, world " );
}
return 0;
} /* end of main */
[scz@ /home/scz/src]> gcc -Wall -ldl -O3 -o dlopentest dlopentest.c
[scz@ /home/scz/src]> ./dlopentest
hello, world
[scz@ /home/scz/src]>
使用动态加载, 给函数定义新的名字。
如果你对solaris 2.x下使用动态加载熟悉的话,会发现linux下要做的工作与
solaris非常接近。man 3 dlopen查看更多信息。下面是一个简单有效的例子,
链接时需要 -ldl 开关。
[scz@ /home/scz/src]> cat > dlopentest.c
#include
#include
int main ( int argc, char * argv[] )
{
void * libc;
void ( * printf_call ) ();
if ( ( libc = dlopen( "/lib/libc.so.6", RTLD_LAZY ) ) != 0 )
{
printf_call = dlsym( libc, "printf" );
( *printf_call )( "hello, world " );
}
return 0;
} /* end of main */
[scz@ /home/scz/src]> gcc -Wall -ldl -O3 -o dlopentest dlopentest.c
[scz@ /home/scz/src]> ./dlopentest
hello, world
[scz@ /home/scz/src]>
使用动态加载, 给函数定义新的名字。
|
恩 确实 用动态加载 在不同的库里 取得同名函数的地址 然后加以区分就可以了。
|
改名吧。
|
别名。。。
|
你就不能改个名字啊。