(求助)proc 和gcc 编译问题 关于clntsh库

tongzhipeng5699 2012-05-16 07:03:14
我的环境是虚拟机+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;
}
这个问题我昨天晚上 网上百度了一个晚上都没有解决,求牛人解决。
...全文
532 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
mtOS1573 2014-11-19
  • 打赏
  • 举报
回复
这个问题是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 "是我机器的安装目录具体以实际情况为准。
motif_linux 2012-09-16
  • 打赏
  • 举报
回复
我今天在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:.
Linux内核一直是学习的难点:将近3000万行代码,5万多个源文件,代码庞大繁杂、代码很难看懂。《Linux内核编程》将突破以往传统的学习方式,采取更有效和科学的学习方法,多角度地对内核进行多层次分析,不局限于形式,不拘泥细节,目的只有一个:更轻松、更高效地去理解内核、学习内核。为了更好地让学员掌握内核编程技能,更好地理解内核,本课程将采用并不局限于以下学习方法进行课程的录制:降维分析,化简为繁,将复杂的系统简单化用软件工程的方法分析内核:软件分层、模块化分解、框架迭代多角度立体分析Linux内核,目的只有一个:更好地理解内核利用Linux内核中的面向对象编程思想去分析复杂的子系统、子系统交互利用多任务编程的思想去分析Linux内核本套课程预计分为20个左右的小模块,每个模块一个专题,每个专题会陆续发布。拟录制的模块包括但不限于:模块机制、内核裁剪与配置、内核编译与启动、系统调用、中断、文件系统、调度、内存管理、内核同步、设备模型、字符驱动、块驱动、定时器、input、platform设备驱动、device tree、proc、sysfs、I/O...  本课程是《Linux内核编程》的入门篇,主要给大家介绍一下Linux内核开发、Linux驱动开发的就业行情、行业生态、需要掌握哪些技能、Linux内核的学习方法、如何搭建Linux内核的学习开发环境。 

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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