分类: C/C++
一、常见问题
1、在ORACLE 10g 安装准备的过程中:缺少libXp.so.6依赖
上网搜过不少文章,但是都不是很好的解决
我自己摸索出一个解决方法:
在RHEL5的安装盘中找到libXp-1.0.0-8.i386.rpm,进行安装后,便可解决。
2、在ORACLE 10g 安装过程中Xlib: connection to ":0.0" refused by server
Xlib: connection to ":0.0" refused by server
Xlib: No protocol specified
Error: Can't open display: :0.0
以root用户登陆,在shell中运行
[root@brady ~]# xhost local:oracle
non-network local connections being added to access control list
然后oracle身份就可以运行X程序了。
man xhost中有这样一段
A complete name has the syntax ‘‘family:name’’ where the families are as follows:
inet Internet host (IPv4)
inet6 Internet host (IPv6)
dnet DECnet host
nis Secure RPC network name
krb Kerberos V5 principal
local contains only one name, the empty string
si Server Interpreted
其中local那个是用来解决同一台机器的不同用户访问X的问题的。
3.proc: error while loading shared libraries: libclntsh.so.10.1:
cannot open shared object file: No such file or directory
解决方法:
在/etc/profile中添加
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib:/usr/local/lib;
export LD_LIBRARY_PATH
然后可以用source /etc/profile 生效一下
4、PCC-S-02201错误
在用proc进行编译的时候(proc iname=test.pc) 出错
错误信息有很多:
PCC-S-02201, Encountered the symbol "<eof>;" when expecting one of the following....
发生 PCC-S-02201 错误时有两种解决办法:
1)升级编译器
2)设置 parse=none
更正后的命令:proc iname=test.pc parse=none
结果生成test.c文件
5、error: sqlca.h: No such file or directory
执行gcc -o test test.c时:
test.c:152:19: error: sqlca.h: No such file or directory
sqlca.h在$ORACLE_HOME/precomp/public/下
更正后的命令:gcc -o test test.c -I $ORACLE_HOME/precomp/public
6、undefined reference to `sqlcxt'
执行5中的命令时出现错误如下:
test.c:(.text+0x5e5): undefined reference to `sqlcxt'
需要用到$ORACLE_HOME/lib/libclntsh.so
故需加上 -L $ORACLE_HOME/lib -l clntsh
更正后的命令为:
gcc -o test test.c -I /home/oracle/oracle/product/10.2.0/db_1/precomp/public -L $ORACLE_HOME/lib -l clntsh
OK!至此编译成功!
但是这样写太麻烦
typedef struct Tjkjmlog{
char m_getdatatime[18 +1];
char m_monitorcode[6 +1];
char m_ip[23 +1];
char m_res[30+1];
char m_alarmlevel[2+1];
char m_info[128 +1];
}Tjkjmlog;
Error at line 491, column 2 in file jkserv.pc
Tjkjmlog jmlog;
.1
PCC-S-02201, Encountered the symbol "Tjkjmlog" when expecting one of the followi
ng:
ulong_varchar, OCIBFileLocator OCIBlobLocator,
OCIClobLocator, OCIDateTime, OCIExtProcContext, OCIInterval,
OCIRowid, OCIDate, OCINumber, OCIRaw, OCIString, register,
short, signed, sql_context, sql_cursor, static, struct,
typedef, union, unsigned, utext, uvarchar, varchar, void,
volatile, a typedef name, a precompiled header, exec oracle,
exec oracle begin, exec, exec sql, exec sql begin,
exec sql end, exec sql type, exec sql var, exec sql include,
The symbol "enum," was substituted for "Tjkjmlog" to continue.
PCC-F-02102, Fatal error while doing C preprocessing
EXEC SQL BEGIN DECLARE SECTION;
EXEC SQL END DECLARE SECTION;
这两个语句的外面,只要将结构体定义在这两句中间就可以了。如下:
typedef struct Tjkjmlog{
char m_getdatatime[18 +1];
char m_monitorcode[6 +1];
char m_ip[23 +1];
char m_res[30+1];
char m_alarmlevel[2+1];
char m_info[128 +1];
}Tjkjmlog;
8、proc编译时,提示相关的表需要声明
我的环境是在suse10sp2+oracle10g。 程序中使用exec sql insert into t_jm_err_his语句,编译时,总提示如下错误:
hrwang:~/test # proc iname=jkserv.pc
Pro*C/C++: Release 10.2.0.1.0 - Production on Mon Sep 27 09:42:53 2010
Copyright (c) 1982, 2005, Oracle. All rights reserved.
System default option values taken from: /opt/or1/precomp/admin/pcscfg.cfg
Error at line 677, column 10 in file jkserv.pc
EXEC SQL insert into T_jm_err_his
.........1
PLS-S-00201, identifier 'T_JM_ERR_HIS' must be declared
Error at line 677, column 10 in file jkserv.pc
EXEC SQL insert into T_jm_err_his
.........1
PLS-S-00000, SQL Statement ignored
Semantic error at line 677, column 10, file jkserv.pc:
EXEC SQL insert into T_jm_err_his
.........1
PCC-S-02346, PL/SQL found semantic errors
并且确保scott用户对这个表有权限(根据你的oracle情况更改用户名和密码)。或者你可以将userid=scott/hrwang 加入$oracle_home/precomp/admin/pcscfg.cfg文件中,这样在编译时就不用每次都指定了。
9、error while loading shared libraries: $ORACLE_HOME/lib/libnnz10.so:
cannot restore segment prot after reloc: Permission denied
执行程序(./test)时提示错误:
error while loading shared libraries: $ORACLE_HOME/lib/libnnz10.so:
cannot restore segment prot after reloc: Permission denied
相关的文章:
Topic:
Some Linux distributions with SELinux enabled may prevent IDL from running under the default security context. This TechTip is a workaround for CR#41937
Discussion:
Newer Linux distributions have enabled new kernel security extensions from the SELinux project at the NSA. These extensions allow finer-grained control over system security. However, SELinux also changes some default system behaviors, such as shared library loading, that can be problematic to third party programs.If you receive the error message "cannot restore segment prot after reloc: Permission denied" when launching IDL, then your SELinux configuration is preventing IDL from launching.
To rectify this issue, you can either:
(1)Change the default security context for IDL by issuing the command:
chcon -t texrel_shlib_t /usr/local/rsi/idl_6.1/bin/bin.linux.x86/*.so
(2)Disabling SELinux altogether by setting the line
SELINUX=disabled
in your /etc/sysconfig/selinux file.
我使用的解决办法:chcon -t texrel_shlib_t $ORACLE_HOME/lib/*.so
ORACLE_SID=HRWANG
ORACLE_HOME=/opt/or1
LD_LIBRARY_PATH=/opt/or1/lib:/lib:/usr/lib:/usr/local/lib
PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_SID ORACLE_HOME LD_LIBRARY_PATH PATH
sys_include=(/opt/or1/precomp/public,/usr/include,/usr/lib/gcc/i586-suse-linux/4.1.2/include,/usr/lib/gcc-lib/i486-suse-linux/2.95.3/include,/usr/lib/gcc-lib/i386-redhat-linux/3.2.3/include,/usr/lib/gcc-lib/i386-redhat-linux7/2.96/include)
ltype=short
userid=scott/hrwang #数据库用户名密码,根据你的情况填写
mode=oracle
parse=none
sqlcheck=semantics
dbms=v8
def_sqlcode=true