wboobw 发表于 2008-05-20 23:50

请教:aix53 + sybase125下编译cp程序,报Undefined symbol错

平台:
aix5.3.0.0
sybase 12.5.432位
rs6000

SYBPLATFORM=rs6000已经定义

描述:
从aix4.3.2.0 sybase 12.0 移植到 aix 5.3.0.0 sybase 12.5.4,在aix4.3.2.0 sybase 12.0上面没有出现问题,
顺利编译,但在新的平台下:sybase的sample/esqlc下的例子可以编译成功,但是编译自己的应用的时候报错,预编译没事,
ld的时候报错:
ld: 0711-317 ERROR: Undefined symbol: .cs__delete_thread_msg__FP10_cscontext
ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information.

我看了我门平台自己的应用和makefile,程序中也都include了头文件/OCS-12_5/include/sybhesql.h和sybtesql.h,
make的要素和sample里面的本质是一样的,只是多连接了我们应用自己的东西,make以及makefile如下,我觉得可能是连进来的
我们自己的静态库libpub.a有问题,但是我看了我们生成静态库libpub.a的makefile和程序,没有什么错,而且里面用到的.h都有,
都是没有什么异常的:

[系统>/home/xe/src/tools]make
      /sybase/OCS-12_5/bin/cpre -m -l -Uxe -SSYBASE -Dxe -Pxe -I/home/xe/src/include
      -I/sybase/OCS-12_5/include -O ferr.C ferr.cp

M_WHEN_ERROR,Unable to find the SQL statement 'WHENEVER SQLERROR'.
M_WHEN_WARN,Unable to find the SQL statement 'WHENEVER WARNING'.
M_WHEN_NF,Unable to find the SQL statement 'WHENEVER NOT FOUND'.
0 Error(s) and 3 Warning(s) found.
Statistical Report:
      Program name: cpre
      Options specified: -l -m
      Input file name: ferr.cp
      Listing file name:
      Target file name: ferr.C
      ISQL file name:
      Tag ID specified:
      Compiler used: ANSI_C
      Open Client version: CS_VERSION_125
      Number of information messages: 11
      Number of warning messages: 3
      Number of error messages: 0
      Number of SQL statements parsed: 6
      Number of host variables declared: 3
      Number of SQL cursors declared: 0
      Number of dynamic SQL statements: 0
      Number of stored Procedures generated: 0
      Connection(s) information:
                User id: xe
                Server: SYBASE
                Database: xe

      xlc -g-I/home/xe/src/include-I/sybase/OCS-12_5/include -o /home/xe/bin/ferr /home/xe/src/tools/ferr.C
      -lC -lm/home/xe/lib/libpub.a /sybase/OCS-12_5/lib/libct.so /sybase/OCS-12_5/lib/libcs.so /sybase/OCS-12_5/lib/libcomn.so /sybase/OCS-12_5/lib/libtcl.so /sybase/OCS-12_5/lib/libintl.so /sybase/OCS-12_5/lib/libsybdb.so

ld: 0711-317 ERROR: Undefined symbol: .cs__delete_thread_msg__FP10_cscontext
ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information.
make: 1254-004 The error code from the last command is 8.


我的makefile:

SYSDIR =$(SYBASE)/OCS-12_5
SYSHEAD =$(SYSDIR)/include
INCLUDE= -I$(SYSHEAD)
INCL = -I$(PSHOME)/src/include -I$(PSHOME)/src/include/comhead$(INCLUDE)
PRECOMP = $(SYBASE)/OCS-12_5/bin/cpre -m -l -Uxe -SSYBASE -Dxe -Pxe $(INCL)
LINK = xlc -g
SYBLIBDIR= $(SYBASE)/OCS-12_5/lib/
LIBS =$(SYBLIBDIR)libct.so\
      $(SYBLIBDIR)libcs.so\
      $(SYBLIBDIR)libcomn.so\
      $(SYBLIBDIR)libtcl.so\
      $(SYBLIBDIR)libintl.so\
      $(SYBLIBDIR)libsybdb.so
      
BIN = $(PSHOME)/bin/
LIB = $(PSHOME)/lib/
SRC = $(PSHOME)/src/tools/
HEADFILE=$(PSHOME)/src/include/comhead/*.h

$(BIN)ferr:$(SRC)ferr.cp $(LIB)libpub.a $(HEADFILE)
      $(PRECOMP) -O ferr.C ferr.cp
      $(LINK) $(INCL) -o $(BIN)ferr $(SRC)ferr.C -lC -lm $(LIB)libpub.a $(LIBS)
      rm ferr.C

请大家指点,找了很久的错,都找不到原因

wboobw 发表于 2008-05-26 09:51

回复 #1 wboobw 的帖子

问题已经解决,按照sybase的sample的makefile来写也不行,最后是将sybase中include部分的sybesql.c编译为.o,然后在自己的应用程序makefile中连上这个.o就可以了,在程序中直接include不行,所以将程序中include的都去掉:
64位环境也是这样做,就可以了:

封掉:
/*
#include "/sybase/OCS-12_5/include/sybhesql.h"
#include "/sybase/OCS-12_5/include/sybtesql.h"
*/

makefile改为:

SYBSRC=sybesql.o

sybesql.o:/sybase/OCS-12_5/include/sybesql.c
      $(LINK) $(INCL) -c /sybase/OCS-12_5/include/sybesql.c

$(BIN)ferr:$(SRC)ferr.cp $(LIB)libpub.a $(HEADFILE)
      $(PRECOMP) -O ferr.C ferr.cp
      $(LINK) $(INCL) -o $(BIN)ferr $(SRC)ferr.C -lC -lm $(SYBSRC) $(LIB)libpub.a $(LIBS)
      rm ferr.C
页: [1]
查看完整版本: 请教:aix53 + sybase125下编译cp程序,报Undefined symbol错