>Проблема в том, что по умолчанию линкер gcc экспортирует все ф-ции.
> Соответственно, UDF цепляет delete движка (embedded коннект), или isql.
> Движок в 2.5 вроде как уже поправили на этот счёт, но утилиты по прежнему
> всё выставляют наружу.
Но тогда ведь и new бы цеплялась?
Или в чем-то усл
"Vladimir" ...
Похоже, линкер/загрузчик где-то путается с разрешением символов и вместо
rtl-ных new/delete подставляет какие-то левые.
Тут немного непонятно.
Если в моей udf используются new/delete от firebird, то почему они
приводят к ошибке?
Может быть, дело в другом?
Например, такая ситуац
"Vladimir" ...
Сегодня получился положительный результат.
Большое спасибо за советы.
Вчера долго не удавалось настроить сетевой коннект.
Применял разные рекомендации, которые находил.
Вероятно, сделал что-то лишнее.
В firebird.log были записи
INET/inet_error: send errno = 32
Версия точно Firebir
>> Вариант 3. Пытаюсь перегрузить операторы new и delete.
> Попробуй в этом варианте сделать операторы инлайновыми или разместить их
> в неименованном пространстве имён.
> Т. е. скрыть от линкера.
Пробовал объявить свои перегруженные операторы как inline - все равно
в udf управление на них не пер
Сегодня получился положительный результат.
Большое спасибо за советы.
Вчера долго не удавалось настроить сетевой коннект.
Применял разные рекомендации, которые находил.
Вероятно, сделал что-то лишнее.
В firebird.log были записи
INET/inet_error: send errno = 32
Версия точно Firebird CS 2.1.3.18185-
"Vladimir" ...
С сетевым коннектом ошибка проявляется по-другому, и isql при этом не
падает.
SQL> SELECT TestInsert(333) from RDB$Database;
TESTINSERT
Statement failed, SQLCODE = -902
Error reading data from the connection.
SQL> quit;
Это действительно 2.1.3 ? Не 2.0.х ?
В fi
28.11.2011 18:27, Vladimir пишет:
> Вариант 3. Пытаюсь перегрузить операторы new и delete.
Попробуй в этом варианте сделать операторы инлайновыми или разместить их
в неименованном пространстве имён.
Т. е. скрыть от линкера.
Похоже, линкер/загрузчик где-то путается с разрешением символов и вместо
r
С сетевым коннектом ошибка проявляется по-другому, и isql при этом не
падает.
SQL> SELECT TestInsert(333) from RDB$Database;
TESTINSERT
Statement failed, SQLCODE = -902
Error reading data from the connection.
SQL> quit;
С локальным коннектом isql падал.
SQL> SELECT TestInsert(33
"Vladimir" ...
Да, все в isql с локальным коннектом.
Имеет смысл попробовать сетевой коннект?
Да
--
Хорсун Влад
Да, все в isql с локальным коннектом.
Имеет смысл попробовать сетевой коннект?
С уважением, Владимир.
"Vladimir" ...
А каким образом проверяется работоспособность UDF ?
Запросы выполняются в isql с локальным коннектом ?
Сетевой коннект не пробовал ?
--
Хорсун Влад
Firebird CS 2.1.3.18185
g++ версии 4.4.3-4ubuntu5
Отладчиком пользоваться не пытался.
Проверил на простом примере. Получается следующее.
Вариант 1. Без new и delete.
#include
long TESTINSERT(long *theArg)
{
long* aTestItem = (long*) malloc(sizeof(long));
free(aTestItem);
long aResult
"Vladimir" ...
Спасибо за совет.
Очень было похоже, что это может помочь, но никакие опции редактора не
изменили ситуацию.
Какого-такого редактора ?
Пробовал --no-export-dynamic --exclude-libs, никакого эффекта.
Какая версия Firebird ?
Есть возможность пройтись отладчиком по коду
Спасибо за совет.
Очень было похоже, что это может помочь, но никакие опции редактора не
изменили ситуацию.
Пробовал --no-export-dynamic --exclude-libs, никакого эффекта.
С уважением, Владимир.
On Nov 18, 11:08 am, "Khorsun Vlad" wrote:
> "Vladimir" ...
>
> > !
>
> > Linux UDF, gcc,
> > :
>
> > long* aTestItem = new long;
> > delete aTestItem;
>
> > Segmentation fault delete.
>
> ,
> .so ӣ .
>
> --
"Vladimir" ...
Здравствуйте!
При попытке в Linux использовать UDF, собранную в gcc, столкнулся со
следующим:
long* aTestItem = new long;
delete aTestItem;
вызывает ошибку Segmentation fault на операторе delete.
Насколько я помню, нужно явно сказать линкеру не экспортировать
из .so всё п
Здравствуйте!
При попытке в Linux использовать UDF, собранную в gcc, столкнулся со
следующим:
long* aTestItem = new long;
delete aTestItem;
вызывает ошибку Segmentation fault на операторе delete.
В Windows все проходит без ошибок.
Если библиотеку использовать не в UDF, а вызывать из просто
17 matches
Mail list logo