UDF для FireBird 1.5 i 2.0
UDF для FireBird 1.5 i 2.0
UDF написаны на C, столкнулся с проблемой.
Ранее откомпилированный UDF работали под FireBird 1.5, на 2.0 - база падает.
переделал malloc на ib_util_malloc с include ib_util.h
откомпилировал под форточками на VC 6.0 - работает на FB 1.5 и FB 2.0
Теперь проблема под Linux и FreeBSD, UDF компилится:
gcc udf_name.c -shared -fPIC -o udf_name.so -I/usr/local/firebird/include -I/usr/local/firebird/lib
ошибок нет, UDF не работает.
Надо компилить с другими ключами?
Ранее откомпилированный UDF работали под FireBird 1.5, на 2.0 - база падает.
переделал malloc на ib_util_malloc с include ib_util.h
откомпилировал под форточками на VC 6.0 - работает на FB 1.5 и FB 2.0
Теперь проблема под Linux и FreeBSD, UDF компилится:
gcc udf_name.c -shared -fPIC -o udf_name.so -I/usr/local/firebird/include -I/usr/local/firebird/lib
ошибок нет, UDF не работает.
Надо компилить с другими ключами?
-
- Заслуженный разработчик
- Сообщения: 1436
- Зарегистрирован: 15 сен 2005, 09:05
-
- Сообщения: 1
- Зарегистрирован: 15 янв 2007, 12:15
Re: UDF для FireBird 1.5 i 2.0
А можна подробнее о malloc? А то у меня такая же проблема. FireBird2 просто теряет конект если идет запрос с полем, которое использует UDF. На Delphi для Firebird1.5 я делал так: function malloc(Size: Integer): Pointer; cdecl; external 'msvcrt.dll';SkyFox писал(а): переделал malloc на ib_util_malloc с include ib_util.h
Re: UDF для FireBird 1.5 i 2.0
http://forum.ibase.ru/phpBB2/viewtopic.php?t=2495Зореслав Гораль писал(а):А можна подробнее о malloc?
Остальное ищи через поисковики.
-
- Заслуженный разработчик
- Сообщения: 1436
- Зарегистрирован: 15 сен 2005, 09:05
Re: UDF для FireBird 1.5 i 2.0
FB2 использует совсем другой malloc потому как собирается другим компилятором.Зореслав Гораль писал(а):external 'msvcrt.dll';
kdv писал(а):может функция "того"? очень часто бывает когда кривая функция в определенных условиях работает, и даже возвращает результат. Когда условия меняются - сервер начинает падать при вызове такой функции.
под Windows, на FB 1.5 и FB 2.0 работает!
нашел, может это:
Bug # 750659
fixed by Nickolay Samofatov
(1.5.1) The wrong soname for libib_util.so caused warnings in ldconfig and also meant that it
could not be loaded automatically by external function libraries using calls to ib_util_malloc().
That made such libraries unusable, unless a PRELOAD environment setting was added for fbserver/fb_inet_server.
"это" - это про то, что ib_util вообще не грузилась на линуксе.
А следовательно, и udf не работали, совсем. А не работали но приводили к падению на сервере.
А следовательно, и udf не работали, совсем. А не работали но приводили к падению на сервере.
ну вот фиг знает. буквально на прошлой неделе было в саппорте, что люди перешли на более новую версию линукса на новой машине, и сервак стал падать. Нашли кривую udf.под Windows, на FB 1.5 и FB 2.0 работает!
test.c
test.def
Код: Выделить всё
#include <stdio.h>
#include <stdlib.h>
#if TIME_WITH_SYS_TIME
# include <sys/time.h>
# include <time.h>
#else
# if HAVE_SYS_TIME_H
# include <sys/time.h>
# else
# include <time.h>
# endif
#endif
#include <string.h>
#include <math.h>
#include <ibase.h>
#include "example.h"
#include "ib_util.h"
#ifdef CPU386 /* Fast assembler version exists for 386/486 */
#pragma inline
#endif
char* EXPORT TEST_replace(char *source, char *replace_this, char *replacement){
char *result = NULL;
result = (char *)ib_util_malloc(strlen(source)+1);
result=strcpy(result, source);
*(result+strlen(source))='\0';
return result;
}
main(){
}
Код: Выделить всё
IBRARY test
DESCRIPTION 'test.dll'
DATA READ WRITE
EXPORTS
TEST_replace
Последний раз редактировалось SkyFox 26 янв 2007, 10:33, всего редактировалось 4 раза.
-
- Заслуженный разработчик
- Сообщения: 1436
- Зарегистрирован: 15 сен 2005, 09:05
Код: Выделить всё
DECLARE EXTERNAL FUNCTION REPLACEME
CSTRING(5000) CHARACTER SET NONE,
CSTRING(200) CHARACTER SET NONE,
CSTRING(200) CHARACTER SET NONE
RETURNS CSTRING(5000) FREE_IT
ENTRY_POINT 'TEST_replace' MODULE_NAME 'test'
Последний раз редактировалось SkyFox 17 янв 2007, 16:22, всего редактировалось 1 раз.
комманду для компилятора написать?WildSery писал(а):Почему в коде нет EXPORT и зачем в объявлении CHARACTER SET NONE?
gcc test.c -shared -fPIC -o test.so -I/opt/firebird/include -I/opt/firebird/examples -I/opt/firebird/lib
Последний раз редактировалось SkyFox 17 янв 2007, 16:23, всего редактировалось 1 раз.