当前位置: 技术问答>linux和unix
so 封装 tuxedo,引用api的时候提示重定向错误。
来源: 互联网 发布时间:2016-04-18
本文导语: 我最近在封装一个 so,开发环境是 sun solaris ,用c++ 把 tuxedo的 一个功能 封装起来。 但是 却遇到了重定向问题: 开发环境是:otaadmin@otas1> gcc -v Reading specs from /usr/local/lib/gcc/sparc-sun-solaris2.9/3.4.6/specs Con...
我最近在封装一个 so,开发环境是 sun solaris ,用c++
把 tuxedo的 一个功能 封装起来。 但是 却遇到了重定向问题:
开发环境是:otaadmin@otas1> gcc -v
Reading specs from /usr/local/lib/gcc/sparc-sun-solaris2.9/3.4.6/specs
Configured with: ../configure --with-as=/usr/ccs/bin/as --with-ld=/usr/ccs/bin/ld --enable-shared --enable-
languages=c,c++,f77
Thread model: posix
gcc version 3.4.6
otaadmin@otas1> uname -a
SunOS otas1 5.9 Generic_117171-10 sun4u sparc SUNW,Sun-Fire-480R
so的代码是://----------------------------------------------------------
bool Init(char* szServerIP,char* szPort)
{
int nRet = 0;
if(m_tuxedoOpen)
return true;
else
{
char szConn[200];
memset(szConn,0,200);
sprintf(szConn,"WSNADDR=//%s:%s",szServerIP,szPort);
tuxputenv(szConn); //此处出现了调用函数重定向错误
tpinitbuf = (TPINIT *)tpalloc("TPINIT", NULL, TPINITNEED(0));
tpinitbuf->flags = TPMULTICONTEXTS;
static int init_times=0;
try
{
if (tpinit(tpinitbuf) == -1)
{
}
else
init_times = 0;
}
catch (...)
{
printf("rntuxedo_init errorrn");
return false;
}
m_tuxedoOpen = true;
return true;
}
}
//----------------------------------------------------------
我自己写了个 调用这个so的程序,程序名称是 testdemo,在程序运行到 tuxputenv(szConn); 这个函数的时候 出现了问题。
ld.so.1: ./testdemo: 致命的: 重定位错误: 文件/opt/TecomOTA/ota2/test/dipatch/patchdll.so: 符号tuxputenv: 参照的符号没有找到
我现在不知道,该怎么解决这个事情,只知道 ,g++ 封装so的时候 有好多 函数的名字都会被改的。那么,tuxputenv 这个函数 其实是
tuxedo的api,怎么也会有这个问题呢。奇怪了。请大侠们帮忙看看。给点提示。
把 tuxedo的 一个功能 封装起来。 但是 却遇到了重定向问题:
开发环境是:otaadmin@otas1> gcc -v
Reading specs from /usr/local/lib/gcc/sparc-sun-solaris2.9/3.4.6/specs
Configured with: ../configure --with-as=/usr/ccs/bin/as --with-ld=/usr/ccs/bin/ld --enable-shared --enable-
languages=c,c++,f77
Thread model: posix
gcc version 3.4.6
otaadmin@otas1> uname -a
SunOS otas1 5.9 Generic_117171-10 sun4u sparc SUNW,Sun-Fire-480R
so的代码是://----------------------------------------------------------
bool Init(char* szServerIP,char* szPort)
{
int nRet = 0;
if(m_tuxedoOpen)
return true;
else
{
char szConn[200];
memset(szConn,0,200);
sprintf(szConn,"WSNADDR=//%s:%s",szServerIP,szPort);
tuxputenv(szConn); //此处出现了调用函数重定向错误
tpinitbuf = (TPINIT *)tpalloc("TPINIT", NULL, TPINITNEED(0));
tpinitbuf->flags = TPMULTICONTEXTS;
static int init_times=0;
try
{
if (tpinit(tpinitbuf) == -1)
{
}
else
init_times = 0;
}
catch (...)
{
printf("rntuxedo_init errorrn");
return false;
}
m_tuxedoOpen = true;
return true;
}
}
//----------------------------------------------------------
我自己写了个 调用这个so的程序,程序名称是 testdemo,在程序运行到 tuxputenv(szConn); 这个函数的时候 出现了问题。
ld.so.1: ./testdemo: 致命的: 重定位错误: 文件/opt/TecomOTA/ota2/test/dipatch/patchdll.so: 符号tuxputenv: 参照的符号没有找到
我现在不知道,该怎么解决这个事情,只知道 ,g++ 封装so的时候 有好多 函数的名字都会被改的。那么,tuxputenv 这个函数 其实是
tuxedo的api,怎么也会有这个问题呢。奇怪了。请大侠们帮忙看看。给点提示。
|
那就比较奇怪了。
|
路径,或者 参数,或者 动态库放置在哪里错了。
|
使用ldd看看需要哪些动态库,然后确保每个动态库都存在。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。