当前位置: 技术问答>linux和unix
请教:如何在aix下生成 .so 文件。 急!
来源: 互联网 发布时间:2015-07-01
本文导语: 我想将原来在solaris下的程序移植到AIX下,原来的程序有我自己编译的 .so 文件 在AIX下用 xlC 重新编译后发现用 dlopen 函数打不开生成的 .so文件,获得返回值为NULL。不知是什么原因,是否我编译的不正确呢。我的...
我想将原来在solaris下的程序移植到AIX下,原来的程序有我自己编译的 .so 文件
在AIX下用 xlC 重新编译后发现用 dlopen 函数打不开生成的 .so文件,获得返回值为NULL。不知是什么原因,是否我编译的不正确呢。我的脚本是这么写的
/usr/vacpp/bin/xlC -G -o ./lib/libneobj.so ne_obj_factory_sub.cpp ne_obj.cpp -D INFORMIX -D AIX -D_LDAP_ -I ../include/
我在调用动态链接的程序里的代码是:
extern void *vpHandle;
……
……
vpHandle = dlopen(dllname, RTLD_LAZY);
if(vpHandle == NULL)
{
log.write(LOG_DEV|MAJOR, "Failed to open dll: %sn", dllname);
perror("dlopen");
exit(-1);
}
……
日志中的结果是
Failed to open
dll: /opt/daladmin/CODE/DAL_IBM/new_neagent_dll/debug/lib/libneobj.so
libneobj.so文件的路径没有问题,但始终无法打开。
那位高手能帮帮我,我一定感谢您!
在AIX下用 xlC 重新编译后发现用 dlopen 函数打不开生成的 .so文件,获得返回值为NULL。不知是什么原因,是否我编译的不正确呢。我的脚本是这么写的
/usr/vacpp/bin/xlC -G -o ./lib/libneobj.so ne_obj_factory_sub.cpp ne_obj.cpp -D INFORMIX -D AIX -D_LDAP_ -I ../include/
我在调用动态链接的程序里的代码是:
extern void *vpHandle;
……
……
vpHandle = dlopen(dllname, RTLD_LAZY);
if(vpHandle == NULL)
{
log.write(LOG_DEV|MAJOR, "Failed to open dll: %sn", dllname);
perror("dlopen");
exit(-1);
}
……
日志中的结果是
Failed to open
dll: /opt/daladmin/CODE/DAL_IBM/new_neagent_dll/debug/lib/libneobj.so
libneobj.so文件的路径没有问题,但始终无法打开。
那位高手能帮帮我,我一定感谢您!
|
aix下编译动态库的例子:
cc -bnoentry -G -o libwel.so wel.c -lc
调用动态库的程序:
cc -bdynamic -brtl -o open open.c -L. -lwel -ldl
用nm看看能不能看到so里面的符号。如果有,说明有可能是环境变量的问题。
cc -bnoentry -G -o libwel.so wel.c -lc
调用动态库的程序:
cc -bdynamic -brtl -o open open.c -L. -lwel -ldl
用nm看看能不能看到so里面的符号。如果有,说明有可能是环境变量的问题。
|
利用nm可以查看动态库的的接口信息。aix没用过
linux下面是
g++ -o -shared test test.cpp -L/usr/lib/mylib -lmy
mylib 是调用动态库的路径。my 是动态库的名称
如果动态库没有ldconfig 导入到系统动态库查询表的时候,可能会出现找不到的情况。
当然用环境变量设置pwd也是一种方法。
good luck
linux下面是
g++ -o -shared test test.cpp -L/usr/lib/mylib -lmy
mylib 是调用动态库的路径。my 是动态库的名称
如果动态库没有ldconfig 导入到系统动态库查询表的时候,可能会出现找不到的情况。
当然用环境变量设置pwd也是一种方法。
good luck