Sqlite 3.6.15 版,BC++ 编译生成的Sqlite.objDelphi 中用这个命令引用OBJ {$L 'OBJ\sqlite3.obj'}以下是错误信息:[Pascal Error] sqlite3.pas(201): E2065 Unsatisfied forward or external declaration: 'strlen'
[Pascal Error] sqlite3.pas(1): E2065 Unsatisfied forward or external declaration: '_strlen'看了下Sqlite 的源码,好像没有调用strlen ,而是自已实现了功能相同的函数。下面的代码是从网上得到的,就是不明白为什么会有这么多的OBJ 依赖???这些OBJ 从哪里得到的?unit sqlite3;interfaceuses
  Windows,wcrypt2;//{$L 'OBJ\sqlite3.obj'}{$L 'OBJ\streams.obj'}
{$L 'OBJ\_ftoul.obj'}
{$L 'OBJ\files.obj'}
{$L 'OBJ\strlen.obj'}
{$L 'OBJ\assert.obj'}
{$L 'OBJ\memcmp.obj'}
{$L 'OBJ\memcpy.obj'}
{$L 'OBJ\memset.obj'}
{$L 'OBJ\strcmp.obj'}
{$L 'OBJ\strcpy.obj'}
{$L 'OBJ\strcat.obj'}
{$L 'OBJ\strncmp.obj'}
{$L 'OBJ\strncpy.obj'}
{$L 'OBJ\strncat.obj'}...

解决方案 »

  1.   

    源码里面应该有文件可以编译生成这些obj
    试试找找有没有makefile之类的
      

  2.   

    除sqlite3之外的obj一般是从bcc的cw32.lib文件中搞出来的,
    比如我的bcc安装在C:\Borland\BCC55\
    在lib目录下有cw32.lib
    另外,在bin目录下有tlib工具软件,
    使用下边的句子可以得到相应的obj文件,
    tlib cw32.lib *abort *allocbuf *assert *atol *bigctype*calloc *clear87 *clocale *clower *ctrl87 *cupper *cvtentry *cvtfak *cvtfakw *defhandl *deflt87 *ermsghlp *errno *errormsg *except *exit *fflush *files *files2*flushout *fpreset *fprintf *fputn *fputs *ftol *fuildq *fuistq *fxam *getenv *getinfo *globals *gmtime *handles *heap *hrdir_b *hrdir_mf *hrdir_r *hrdir_s *hugeval *initcvt *initexit *int64toa *ioerror *is *isctype *iswctype *ldtrunc *longtoa *lputc *ltolower *ltoupper *mbctype *mbisalp *mbisdgt *mbisspc *mbschr *mbsnbcmp *mbsnbcpy *mbsnbicm *mbsrchr *mbyte1 *memcmp *memcpy *memmove *memset *patexit *perror *platform *qdiv10 *qmul10 *realcvt *realcvtw *realloc *scantod *scanwtod *setenvp *setexc *signal *sprintf *strcat *strcmp *strcpy *streams *strlen*strncat *strncmp *strncpy *ta *timedata *timefunc *tzdata *tzset *virtmem *vprinter *wcscpy *wcslen *wis *wmemset *xcvt *xcvtw *xfflush *_cfinfo *_ftoul *_ll*_pow10 *_tzset *_write *__isatty *__lseek *__write我曾在asqlite基础上对3.6.16生成过静态版本,对{$L obj\...}的一些地方需要作些调整,可能是我下载的asqlite版本太老的原因吧。另外,cw32mt.lib的多线程版本我没有编译成功,可能是因为对bcc不熟悉的原因,如果楼长搞定mt版本的话,能否请指点一下
      

  3.   

    太感谢2 楼的朋友了!还有问题哦我把cw32.lib Copy到C 盘了,用下面这个命令没有看见生成abort.OBJ?D:\>tlib C:\cw32.lib  *abort
      

  4.   

    tlib在path下?其它文件可以生成?
    你的bcc是什么版本的?我的是bcc55,可以生成abort.obj的,
      

  5.   

    用这个命令已经成功生成strlen.OBJ ,
    D:\>tlib C:\cw32.lib *strlen, mylib.list.    // 在D 盘下生成strlen.OBJ 用这个OBJ 替换掉原来的strlen.OBJ ,但还是这个错误: [Pascal Error] sqlite3.pas(201): E2065 Unsatisfied forward or external declaration: 'strlen' 
      

  6.   

    obj被导入的顺序好像很重要,
    如果是strlen的话,这应当是delphi自己的strlen函数,一般obj中的大多是_xxx或者__xxx这样的形式
      

  7.   

    strlen.obj中应当包含的是_strlen函数,你出错的这句及上下文是什么样的代码?
      

  8.   

    问题已经解决,是OBJ 的排列顺序问题。
      

  9.   

    恭喜,以后有空多交流一下sqlite3在delphi静态编译的问题啊
      

  10.   

    在用DELPHI编译SQLITE V3.7.6.2时出现以下问题:
    1、[DCC Error] sqlite3.pas(314): E2065 Unsatisfied forward or external declaration: '_strlen'
    2、[DCC Error] sqlite3.pas(314): E2065 Unsatisfied forward or external declaration: '_atol'
    3、[DCC Error] sqlite3.pas(314): E2065 Unsatisfied forward or external declaration: '__ltoupper'
    请问obj文件的顺序是怎么确定的?谢谢!