为何dlopen打开含连接数据库操作的动态文件.so就报错?

guqs 2004-04-21 12:51:51
在sco unix下:
我的程序用dlopen(chLibPath, RTLD_LAZY)打开一个动态文件.so,结果
打开动态库失败,dlerror报错:
dynamic linker: pa_batcol: relocation error: symbol not found: environ
我的动态库是带连接本地数据库的,如果打开一个不带数据库的.so就没问题。
我将发现,只要动态库文件程序中有这句,打开动态连接库就会报上面的错误,如下:
EXEC SQL CONNECT :chUserName IDENTIFIED BY :chPassWord AT :chFrontDbName USING :chService;
将其注释掉就可以了(其他数据库操作也注释掉)。
请问,我该如何解决?怎样连接数据库才能行?
...全文
131 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
guqs 2004-04-27
  • 打赏
  • 举报
回复
1、我使用的是proc*c
2、连接oracle
3、我编译的方法是:用makefile文件编译没有问题,如果是直接运行的程序也没有问题,但编译成.so就不能被正常调用。
ORALIB = -L${ORACLE_HOME}/lib -lsql -lsqlnet -lncr -lsqlnet -lclient -lcommon -
PROCPLSFLAGS= sqlcheck=full userid=$(USERID) include=${PUBLIC_HOME}/def

dllfunc:dllfunc.pc
$(PROC) $(PROCPLSFLAGS) iname=$@.pc
$(CC) $(DLLFLAGS) $(APPINC) $(ORAINC) -o $@.so $@.c $(APPLIB) $(ORALIB)
rm $@.c $@.lis
mv $@.so $(DLLDIR)

请教具体应该如何做?
conquer 2004-04-25
  • 打赏
  • 举报
回复
预编译,使用嵌入式sql.需要你的代码预编译过后才可以连接正常.
不知道你连接是什么数据库? sybase ? oracle ? informaix ? 写错了 informix ?
知道具体数据库后才知道该用哪个预编译器.
你查找 嵌入式 sql 的资料看看吧.
l997 2004-04-21
  • 打赏
  • 举报
回复
不知道,帮你顶吧

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧