C++ 编译

Kylin_chen 2007-03-19 01:37:25
HI,all我在LINK的时候出现了错误
g++ -o IView -lsocket -lnsl DBSimpleAccess.o main.o BaseProcessor.o FileProcessor.o BinCDRProcessor.o TextDelimiterProcessor.o MatrixAccessor.o SocketClient.o Telnet.o SISolarisBase.o SNMPBase.o ProcessorFactory.o ASN1Decode.o LibString.o LibFile.o LibDate.o XMLParser.o MapOperate.o PPCHQ03Processor.o UNICARDHQ03Processor.o PPCHQ03DBUser.o GlobalBuffer.o GlobalWriter.o -L/disk2/oracle/product/9.2.0/lib/ -lclntst9 `cat /disk2/oracle/product/9.2.0/lib/ldflags` `cat /disk2/oracle/product/9.2.0/lib/sysliblist` -R/disk2/oracle/product/9.2.0/lib -laio -lposix4 -lm
ld: fatal: symbol `sqlca' is multiply-defined:
(file DBSimpleAccess.o type=OBJT; file SISolarisBase.o type=OBJT);
ld: fatal: symbol `oraca' is multiply-defined:
(file DBSimpleAccess.o type=OBJT; file SISolarisBase.o type=OBJT);
ld: fatal: symbol `sqlca' is multiply-defined:
(file DBSimpleAccess.o type=OBJT; file ProcessorFactory.o type=OBJT);
ld: fatal: symbol `oraca' is multiply-defined:
(file DBSimpleAccess.o type=OBJT; file ProcessorFactory.o type=OBJT);
ld: fatal: symbol `sqlca' is multiply-defined:
(file DBSimpleAccess.o type=OBJT; file PPCHQ03DBUser.o type=OBJT);
ld: fatal: symbol `oraca' is multiply-defined:
(file DBSimpleAccess.o type=OBJT; file PPCHQ03DBUser.o type=OBJT);

我在项目中搜了sqlca,有两个文件包含了它,内容完全抄袭oracle自带的sqlca.h(我把文件中包含sqlca的声明都删了,重新编译了一下,还是这个错)
oraca并没有搜到,不只是什么原因
...全文
266 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jixingzhong 2007-03-19
  • 打赏
  • 举报
回复
用原来文件试试,
比较一下差别 ~

错误提示中的 SISolarisBase.o ProcessorFactory.o PPCHQ03DBUser.o 是自己写的么?
ms 不是自己写的,
那么就是 这个自定义文件的问题了 ~
jixingzhong 2007-03-19
  • 打赏
  • 举报
回复
应该是这么修改:
struct sqlca1
{...}

struct sqlca sqlca
==>
struct sqlca1 sqlca

在C++中, struct sqlca{...},
这样 sqlca 就是一种类型,
struct sqlca sqlca 这样的话,
可能造成歧义~
jixingzhong 2007-03-19
  • 打赏
  • 举报
回复
#ifdef SQLCA_STORAGE_CLASS
SQLCA_STORAGE_CLASS struct sqlca sqlca
#else
struct sqlca sqlca

==》

#ifdef SQLCA_STORAGE_CLASS
SQLCA_STORAGE_CLASS struct sqlca sqlca1 //名字改一下试试
#else
struct sqlca sqlca1

看错误提示,
是重复定义的问题 ......
Kylin_chen 2007-03-19
  • 打赏
  • 举报
回复
#ifndef SQLCA
#define SQLCA 1

struct sqlca
{
/* ub1 */ char sqlcaid[8];
/* b4 */ int sqlabc;
/* b4 */ int sqlcode;
struct
{
/* ub2 */ unsigned short sqlerrml;
/* ub1 */ char sqlerrmc[70];
} sqlerrm;
/* ub1 */ char sqlerrp[8];
/* b4 */ int sqlerrd[6];
/* ub1 */ char sqlwarn[8];
/* ub1 */ char sqlext[8];
};

#ifndef SQLCA_NONE
#ifdef SQLCA_STORAGE_CLASS
SQLCA_STORAGE_CLASS struct sqlca sqlca
#else
struct sqlca sqlca
#endif

#ifdef SQLCA_INIT
= {
{'S', 'Q', 'L', 'C', 'A', ' ', ' ', ' '},
sizeof(struct sqlca),
0,
{ 0, {0}},
{'N', 'O', 'T', ' ', 'S', 'E', 'T', ' '},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0}
}
#endif
;
#endif

#endif

/* end SQLCA */
这个cpp里面的代码完全抄袭oracle自带的sqlca.h
jixingzhong 2007-03-19
  • 打赏
  • 举报
回复
有头文件防止重复包含么?
taodm 2007-03-19
  • 打赏
  • 举报
回复
这几个东西重复定义了。
是定义在.h里的变量吧。
C++禁止在.h里定义变量,C则允许。

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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