0

非常に単純な UDF を作成し、正常にコンパイルされましたが、使用しようとすると、次のエラーが発生します。

root@chii:/data/database/bot# /opt/firebird/bin/isql chii.fdb
Database: chii.fdb, User: SYSDBA
SQL> select YKUDF_PERLWRAPPER('/bin/ls' , '-al') from rdb$database;
/opt/firebird/bin/isql: symbol lookup error: /opt/firebird /UDF/YKUDFPerlWrapper: undefined symbol: ib_util_malloc

これは私のSQL宣言です:

declare external function YKUDF_PERLWRAPPER
cstring(1024), cstring(1024)
returns cstring(16384) free_it
entry_point 'perlwrapper' module_name '/opt/firebird/UDF/YKUDFPerlWrapper';

私の関数.c:

#include <stdio.h>
#include <ctype.h>
#include "functions.h"
#include "ibase.h"
#include "ib_util.h"


extern void * ib_util_malloc(long);


char * perlwrapper (file, input)
     char * file;
     int * input;
{

  FILE *fp;
  char merged[1024];

  strcpy(merged, file);
  strcat(merged, " \"");
  strcat(merged, input);
  strcat(merged, "\"");

  fp = popen(merged, "r");    /* Issue the command.   */


  /* Read a line      */
  char line[1024];      /* line of data from unix command*/
  char output[16382];
  strcpy(output," ");

  while ( fgets( line, sizeof line, fp))
  {
    strcat(output,line);
  }
  pclose(fp);

  int i;
  int len = strlen(output);
  char * result = (char *) ib_util_malloc (len + 1);

  for (i = 0 ; i < len ; i++)
    result[i] = output[i];
  result[i] = (char) 0;

  return result;
}

私の関数.h:

#define PROTO_LIST(list) ()

char * perlwrapper PROTO_LIST ((char *, char *));

そして私のコンパイラ:

gcc functions.c -DIB60 -fpic -O -c -w -shared -I/opt/firebird/include -L/opt/firebird/lib -lib_util -lstdc++ -lm -lc -o functions.o
ld functions.o -o YKUDFPerlWrapper -G -Bsymbolic -lgds -lm -lc 

ib_util_malloc についてネットを検索しようとしましたが、ほとんどの質問は未回答のままでした。

4

0 に答える 0