oracle 编译中一个关于clntsh 库的一个 帖子 ,收藏!
-----------------------------------------------------------------------------------------------------------------------------------
(求助)proc 和gcc 编译问题 关于clntsh库 [问题点数:40分,结帖人tongzhipeng5699]
我的环境是虚拟机+UBUNTU11.10+ORACLE10G
按照网上的方法总算装好了,但是发现编译时会出问题 我的oracle10g是建了一个oracle用户然后在oracle用户下安装的。 在oracle用户下: proc first.pc 生成first.c gcc first.c -lclntsh的时候会报如下错误: /usr/bin/ld: cannot find -lclntsh collect2: ld 返回 1 但是我使用 sudo gcc first.c -lclntsh 却能编译成功,并且运行正常。 不用sudo的话也可以 但是要写成 gcc first.c -L $ORACLE_HOME/lib -lclntsh才行 环境变量我在.bashrc和/etc/profile都配置并source过了,应该不是环境变量的问题,我这里还是贴出来吧 export ORACLE_HOME=/opt/ora10g export ORACLE_OWNER=oracle export ORACLE_SID=ora1 export ORACLE_TERM=xterm export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/Apache/Apache/bin:.:$PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib:. export NLS_LANG='AMERICAN_AMERICA.ZHS16GBK' 代码更不可能有问题了,不过我也还贴出来吧,求帮忙 #include <stdio.h> int main () { exec sql include sqlca; EXEC SQL BEGIN DECLARE SECTION; char userpwd[30]="scott/tiger"; char var_name[25]={0}; EXEC SQL END DECLARE SECTION; exec sql connect:userpwd; exec sql select first_name into :var_name from s_emp where id=1; printf("%s\n", var_name); exec sql commit work release; } 这个问题我昨天晚上 网上百度了一个晚上都没有解决,求牛人解决。 |
|
#1 得分:0回复于: 2012-09-16 15:53:17
我今天在ubuntu 12.04 64bit上安装oracle 11gR2时也出现了类似这种情况,在编译日志文件/opt/oracle/ora11g/install/make.log 中我发现有很多/usr/bin/ld: cannot find -lclntsh 这种错误,在这一句后面是说找不到 /usr/lib64/libpthread_noshared.a ,ubuntu12.04下是没有/usr/lib64这个文件夹的,所以我mkdir /usr/lib64,然后 ln -s /usr/lib/x86_64-linux/gnu/libpthread_noshared.a /usr/lib64/,百度了好久,说libc_noshared.a也要做这样一个软链接,然后我的问题就解决了。
补充一句:我没有设置这个export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib:. |
|
#2 得分:0回复于: 2014-11-19 20:28:53
这个问题是gcc在/usr/lib 或是 /usr/local 下找不到libclntsh.so这个动态库造成的。解决办法:找到oracle 的安装路径 cd $ORACLE_HOME/lib 找到 libclntsh.so动态库文件的路径 执行sudo ln-sv /opt/oracle/product/11.2.0/dbhome_1/lib/libclntsh.so /usr/lib/libclntsh.so "/opt/oracle/product/11.2.0/dbhome_1/lib/libclntsh.so "是我机器的安装目录具体以实际情况为准。
|