[firebase-br] Nem o Google sabe: UDF com freepascal

Carlos H. Cantu (TeamFB) listas em warmboot.com.br
Qua Ago 20 13:16:27 -03 2008


Que bom que vc resolveu... segue alguns comentários (tardios):

- O modo correto de definir a função é cdecl. A documentação do
InterBase erroneamente diz que pra usar stdcall, mas tanto o IB como o
Firebird usam o padrão do C para passagem de parâmetros, portanto tem
que ser cdecl.

- No linux, vc pode usar o ldd para verificar as dependências que um
.so tem em relação a outras bibliotecas. Aí no caso, é só ver se elas
existem e podem ser "encontradas".

[]s
Cantu (Membro do TeamFB - FireBase)
http://www.warmboot.com.br
FireBase - http://www.FireBase.com.br
Blog - http://blog.firebase.com.br

P> Obrigado a todos da lista pela ajuda! Descobri o que acontece e talvez
P> este seja o problema de todos aqueles infelizes sem resposta google 
P> afora! :)

P> Fiz um programa de teste que carrega a minha udf e chama a função 
P> tira_acento. O que aconteceu? Ao executar o programa de teste, ocorreu
P> um erro por não encontrar libib_util.so! Coloquei ela no /usr/lib e 
P> beleza! Revolvido o problema! Pena que o Firebird é não tímido sobre 
P> seus problemas, né...

P> E sim, apesar de declarar o MODULE_NAME como udfs, a biblioteca precisa
P> ser libudfs.so. Só não me pergunte porque a ib_udf.so não precisa do lib!

P> ===================================
P> Resumindo o problema (se alguém puder traduzir pro inglês esta parte, 
P> pra ficar como referência...):

P> Tinha uma udf feita em Delphi rodando no Interbase 6 no Windows. Portei
P> ela para o freepascal. Com ajuda da lista, troquei o stdcall por cdecl.
P> A compilação foi ok. Ao tentar usar no Firebird 1.5.3, ele retorna o erro:

P> Invalid token.
P> Invalid request BLR at offset 70.
P> Function SEM_ACENTO is not defined.
P> Module name or entrypoint could not be found.

P> O qual acontecia porque a minha udf não estava encontrando a 
P> libib_utils.so, necessária para udfs feitas em pascal. Coloquei a 
P> libib_utils.so em /usr/lib e tudo funcionou.
P> ===================================

P> Obrigado à todos da lista pela atenção.






Mais detalhes sobre a lista de discussão lista