Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не найдена функция в dll 
:(
    Опции темы
nnn2k
Дата 25.7.2019, 02:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 14.6.2007

Репутация: нет
Всего: нет



Уважаемые коллеги!

К сожалению не имею опыта в разработке под C/C++ и тем более библиотек. Цели изучить данный язык сейчас не стоит, в связи с чем прошу подсобить знающих в вопросе.

Занимаюсь разработкой в PostgreSQL, в котором появилась необходимость установить расширение - индекс для полнотекстового поиска Rum.

Установка производится из под Postgres
Код
CREATE EXTENSION rum;

ОШИБКА:  не удалось открыть управляющий файл расширения "C:/Program Files/PostgreSQL/11/share/extension/rum.control": No such file or directory

Скачал расширение от сюда https://github.com/postgrespro/rum.

Положил файл rum.control и файлы rum-x.x.sql в каталог.

ОШИБКА:  нет доступа к файлу "$libdir/rum": No such file or directory

Нужна библиотека dll для Windows x64. В readme и на форумах сборка под Linux. Поиск по сайтам для скачивания dll такой файл не выдал. Нашел инструкцию по сборке библиотеки под Visual Studio Compiling PostgreSQL extensions with Visual Studio on Windows. Скачал, установил Visual Studio 2019 Community. Сделал все по инструкции. Компиляцию произвести удалось, библиотека создана. Копирую по пути "...\11\lib\".

ОШИБКА:  не удалось найти функцию "rumhandler" в файле "C:/Program Files/PostgreSQL/11/lib/rum.dll"

Здесь я попробовал разобраться сходу, но не удалось. Сдался. Прошу помощи.

В заголовочном файле rum.h такая функция объявлена.
Код

extern Datum rumhandler(PG_FUNCTION_ARGS);

Судя по всему тело функции лежит в файле rumutil.c
Код

Datum
rumhandler(PG_FUNCTION_ARGS)
{...}


Вывод dumpbin по моей скомпилированной библиотеке.
Код

Microsoft (R) COFF/PE Dumper Version 14.21.27702.2
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file ..\rum\x64\Release\rum.dll

File Type: DLL

  Section contains the following exports for rum.dll

    00000000 characteristics
    FFFFFFFF time date stamp
        0.00 version
           1 ordinal base
         156 number of functions
         156 number of names

    ordinal hint RVA      name

          1    0 000017F0 Pg_magic_func = Pg_magic_func
          2    1 00006040 RumArraySimilarityFunction = RumArraySimilarityFunction
          3    2 00006038 RumArraySimilarityThreshold = RumArraySimilarityThreshold
          4    3 00006650 RumFuzzySearchLimit = RumFuzzySearchLimit
          5    4 00001810 pg_finfo_rum_anyarray_config = pg_finfo_rum_anyarray_config
          6    5 00001840 pg_finfo_rum_anyarray_consistent = pg_finfo_rum_anyarray_consistent
          7    6 00001870 pg_finfo_rum_anyarray_distance = pg_finfo_rum_anyarray_distance
          8    7 00001850 pg_finfo_rum_anyarray_ordering = pg_finfo_rum_anyarray_ordering
          9    8 00001860 pg_finfo_rum_anyarray_similar = pg_finfo_rum_anyarray_similar
         10    9 00001720 pg_finfo_rum_bit_compare_prefix = pg_finfo_rum_bit_compare_prefix
         11    A 00001710 pg_finfo_rum_bit_extract_query = pg_finfo_rum_bit_extract_query
         12    B 00001700 pg_finfo_rum_bit_extract_value = pg_finfo_rum_bit_extract_value
         13    C 00001000 pg_finfo_rum_btree_consistent = pg_finfo_rum_btree_consistent
         14    D 000016F0 pg_finfo_rum_bytea_compare_prefix = pg_finfo_rum_bytea_compare_prefix
         15    E 000016E0 pg_finfo_rum_bytea_extract_query = pg_finfo_rum_bytea_extract_query
         16    F 000016D0 pg_finfo_rum_bytea_extract_value = pg_finfo_rum_bytea_extract_value
         17   10 000016C0 pg_finfo_rum_char_compare_prefix = pg_finfo_rum_char_compare_prefix
         18   11 000016B0 pg_finfo_rum_char_extract_query = pg_finfo_rum_char_extract_query
         19   12 000016A0 pg_finfo_rum_char_extract_value = pg_finfo_rum_char_extract_value
         20   13 00001660 pg_finfo_rum_cidr_compare_prefix = pg_finfo_rum_cidr_compare_prefix
         21   14 00001650 pg_finfo_rum_cidr_extract_query = pg_finfo_rum_cidr_extract_query
         22   15 00001640 pg_finfo_rum_cidr_extract_value = pg_finfo_rum_cidr_extract_value
         23   16 000015A0 pg_finfo_rum_date_compare_prefix = pg_finfo_rum_date_compare_prefix
         24   17 00001590 pg_finfo_rum_date_extract_query = pg_finfo_rum_date_extract_query
         25   18 00001580 pg_finfo_rum_date_extract_value = pg_finfo_rum_date_extract_value
         26   19 00001820 pg_finfo_rum_extract_anyarray = pg_finfo_rum_extract_anyarray
         27   1A 00001830 pg_finfo_rum_extract_anyarray_query = pg_finfo_rum_extract_anyarray_query
         28   1B 000018A0 pg_finfo_rum_extract_tsquery = pg_finfo_rum_extract_tsquery
         29   1C 000018B0 pg_finfo_rum_extract_tsquery_hash = pg_finfo_rum_extract_tsquery_hash
         30   1D 00001880 pg_finfo_rum_extract_tsvector = pg_finfo_rum_extract_tsvector
         31   1E 00001890 pg_finfo_rum_extract_tsvector_hash = pg_finfo_rum_extract_tsvector_hash
         32   1F 000011E0 pg_finfo_rum_float4_compare_prefix = pg_finfo_rum_float4_compare_prefix
         33   20 000011F0 pg_finfo_rum_float4_config = pg_finfo_rum_float4_config
         34   21 00001200 pg_finfo_rum_float4_distance = pg_finfo_rum_float4_distance
         35   22 000011D0 pg_finfo_rum_float4_extract_query = pg_finfo_rum_float4_extract_query
         36   23 000011C0 pg_finfo_rum_float4_extract_value = pg_finfo_rum_float4_extract_value
         37   24 00001240 pg_finfo_rum_float4_key_distance = pg_finfo_rum_float4_key_distance
         38   25 00001210 pg_finfo_rum_float4_left_distance = pg_finfo_rum_float4_left_distance
         39   26 00001230 pg_finfo_rum_float4_outer_distance = pg_finfo_rum_float4_outer_distance
         40   27 00001220 pg_finfo_rum_float4_right_distance = pg_finfo_rum_float4_right_distance
         41   28 00001270 pg_finfo_rum_float8_compare_prefix = pg_finfo_rum_float8_compare_prefix
         42   29 00001280 pg_finfo_rum_float8_config = pg_finfo_rum_float8_config
         43   2A 00001290 pg_finfo_rum_float8_distance = pg_finfo_rum_float8_distance
         44   2B 00001260 pg_finfo_rum_float8_extract_query = pg_finfo_rum_float8_extract_query
         45   2C 00001250 pg_finfo_rum_float8_extract_value = pg_finfo_rum_float8_extract_value
         46   2D 000012D0 pg_finfo_rum_float8_key_distance = pg_finfo_rum_float8_key_distance
         47   2E 000012A0 pg_finfo_rum_float8_left_distance = pg_finfo_rum_float8_left_distance
         48   2F 000012C0 pg_finfo_rum_float8_outer_distance = pg_finfo_rum_float8_outer_distance
         49   30 000012B0 pg_finfo_rum_float8_right_distance = pg_finfo_rum_float8_right_distance
         50   31 00001630 pg_finfo_rum_inet_compare_prefix = pg_finfo_rum_inet_compare_prefix
         51   32 00001620 pg_finfo_rum_inet_extract_query = pg_finfo_rum_inet_extract_query
         52   33 00001610 pg_finfo_rum_inet_extract_value = pg_finfo_rum_inet_extract_value
         53   34 00001030 pg_finfo_rum_int2_compare_prefix = pg_finfo_rum_int2_compare_prefix
         54   35 00001040 pg_finfo_rum_int2_config = pg_finfo_rum_int2_config
         55   36 00001050 pg_finfo_rum_int2_distance = pg_finfo_rum_int2_distance
         56   37 00001020 pg_finfo_rum_int2_extract_query = pg_finfo_rum_int2_extract_query
         57   38 00001010 pg_finfo_rum_int2_extract_value = pg_finfo_rum_int2_extract_value
         58   39 00001090 pg_finfo_rum_int2_key_distance = pg_finfo_rum_int2_key_distance
         59   3A 00001060 pg_finfo_rum_int2_left_distance = pg_finfo_rum_int2_left_distance
         60   3B 00001080 pg_finfo_rum_int2_outer_distance = pg_finfo_rum_int2_outer_distance
         61   3C 00001070 pg_finfo_rum_int2_right_distance = pg_finfo_rum_int2_right_distance
         62   3D 000010C0 pg_finfo_rum_int4_compare_prefix = pg_finfo_rum_int4_compare_prefix
         63   3E 000010D0 pg_finfo_rum_int4_config = pg_finfo_rum_int4_config
         64   3F 000010E0 pg_finfo_rum_int4_distance = pg_finfo_rum_int4_distance
         65   40 000010B0 pg_finfo_rum_int4_extract_query = pg_finfo_rum_int4_extract_query
         66   41 000010A0 pg_finfo_rum_int4_extract_value = pg_finfo_rum_int4_extract_value
         67   42 00001120 pg_finfo_rum_int4_key_distance = pg_finfo_rum_int4_key_distance
         68   43 000010F0 pg_finfo_rum_int4_left_distance = pg_finfo_rum_int4_left_distance
         69   44 00001110 pg_finfo_rum_int4_outer_distance = pg_finfo_rum_int4_outer_distance
         70   45 00001100 pg_finfo_rum_int4_right_distance = pg_finfo_rum_int4_right_distance
         71   46 00001150 pg_finfo_rum_int8_compare_prefix = pg_finfo_rum_int8_compare_prefix
         72   47 00001160 pg_finfo_rum_int8_config = pg_finfo_rum_int8_config
         73   48 00001170 pg_finfo_rum_int8_distance = pg_finfo_rum_int8_distance
         74   49 00001140 pg_finfo_rum_int8_extract_query = pg_finfo_rum_int8_extract_query
         75   4A 00001130 pg_finfo_rum_int8_extract_value = pg_finfo_rum_int8_extract_value
         76   4B 000011B0 pg_finfo_rum_int8_key_distance = pg_finfo_rum_int8_key_distance
         77   4C 00001180 pg_finfo_rum_int8_left_distance = pg_finfo_rum_int8_left_distance
         78   4D 000011A0 pg_finfo_rum_int8_outer_distance = pg_finfo_rum_int8_outer_distance
         79   4E 00001190 pg_finfo_rum_int8_right_distance = pg_finfo_rum_int8_right_distance
         80   4F 000015D0 pg_finfo_rum_interval_compare_prefix = pg_finfo_rum_interval_compare_prefix
         81   50 000015C0 pg_finfo_rum_interval_extract_query = pg_finfo_rum_interval_extract_query
         82   51 000015B0 pg_finfo_rum_interval_extract_value = pg_finfo_rum_interval_extract_value
         83   52 00001600 pg_finfo_rum_macaddr_compare_prefix = pg_finfo_rum_macaddr_compare_prefix
         84   53 000015F0 pg_finfo_rum_macaddr_extract_query = pg_finfo_rum_macaddr_extract_query
         85   54 000015E0 pg_finfo_rum_macaddr_extract_value = pg_finfo_rum_macaddr_extract_value
         86   55 00001300 pg_finfo_rum_money_compare_prefix = pg_finfo_rum_money_compare_prefix
         87   56 00001310 pg_finfo_rum_money_config = pg_finfo_rum_money_config
         88   57 00001320 pg_finfo_rum_money_distance = pg_finfo_rum_money_distance
         89   58 000012F0 pg_finfo_rum_money_extract_query = pg_finfo_rum_money_extract_query
         90   59 000012E0 pg_finfo_rum_money_extract_value = pg_finfo_rum_money_extract_value
         91   5A 00001360 pg_finfo_rum_money_key_distance = pg_finfo_rum_money_key_distance
         92   5B 00001330 pg_finfo_rum_money_left_distance = pg_finfo_rum_money_left_distance
         93   5C 00001350 pg_finfo_rum_money_outer_distance = pg_finfo_rum_money_outer_distance
         94   5D 00001340 pg_finfo_rum_money_right_distance = pg_finfo_rum_money_right_distance
         95   5E 00001760 pg_finfo_rum_numeric_cmp = pg_finfo_rum_numeric_cmp
         96   5F 00001790 pg_finfo_rum_numeric_compare_prefix = pg_finfo_rum_numeric_compare_prefix
         97   60 00001780 pg_finfo_rum_numeric_extract_query = pg_finfo_rum_numeric_extract_query
         98   61 00001770 pg_finfo_rum_numeric_extract_value = pg_finfo_rum_numeric_extract_value
         99   62 00001390 pg_finfo_rum_oid_compare_prefix = pg_finfo_rum_oid_compare_prefix
        100   63 000013A0 pg_finfo_rum_oid_config = pg_finfo_rum_oid_config
        101   64 000013B0 pg_finfo_rum_oid_distance = pg_finfo_rum_oid_distance
        102   65 00001380 pg_finfo_rum_oid_extract_query = pg_finfo_rum_oid_extract_query
        103   66 00001370 pg_finfo_rum_oid_extract_value = pg_finfo_rum_oid_extract_value
        104   67 000013F0 pg_finfo_rum_oid_key_distance = pg_finfo_rum_oid_key_distance
        105   68 000013C0 pg_finfo_rum_oid_left_distance = pg_finfo_rum_oid_left_distance
        106   69 000013E0 pg_finfo_rum_oid_outer_distance = pg_finfo_rum_oid_outer_distance
        107   6A 000013D0 pg_finfo_rum_oid_right_distance = pg_finfo_rum_oid_right_distance
        108   6B 00001690 pg_finfo_rum_text_compare_prefix = pg_finfo_rum_text_compare_prefix
        109   6C 00001680 pg_finfo_rum_text_extract_query = pg_finfo_rum_text_extract_query
        110   6D 00001670 pg_finfo_rum_text_extract_value = pg_finfo_rum_text_extract_value
        111   6E 00001540 pg_finfo_rum_time_compare_prefix = pg_finfo_rum_time_compare_prefix
        112   6F 00001530 pg_finfo_rum_time_extract_query = pg_finfo_rum_time_extract_query
        113   70 00001520 pg_finfo_rum_time_extract_value = pg_finfo_rum_time_extract_value
        114   71 00001420 pg_finfo_rum_timestamp_compare_prefix = pg_finfo_rum_timestamp_compare_prefix
        115   72 00001430 pg_finfo_rum_timestamp_config = pg_finfo_rum_timestamp_config
        116   73 000017A0 pg_finfo_rum_timestamp_consistent = pg_finfo_rum_timestamp_consistent
        117   74 00001440 pg_finfo_rum_timestamp_distance = pg_finfo_rum_timestamp_distance
        118   75 00001410 pg_finfo_rum_timestamp_extract_query = pg_finfo_rum_timestamp_extract_query
        119   76 00001400 pg_finfo_rum_timestamp_extract_value = pg_finfo_rum_timestamp_extract_value
        120   77 00001480 pg_finfo_rum_timestamp_key_distance = pg_finfo_rum_timestamp_key_distance
        121   78 00001450 pg_finfo_rum_timestamp_left_distance = pg_finfo_rum_timestamp_left_distance
        122   79 00001470 pg_finfo_rum_timestamp_outer_distance = pg_finfo_rum_timestamp_outer_distance
        123   7A 00001460 pg_finfo_rum_timestamp_right_distance = pg_finfo_rum_timestamp_right_distance
        124   7B 000014B0 pg_finfo_rum_timestamptz_compare_prefix = pg_finfo_rum_timestamptz_compare_prefix
        125   7C 000014C0 pg_finfo_rum_timestamptz_config = pg_finfo_rum_timestamptz_config
        126   7D 000014D0 pg_finfo_rum_timestamptz_distance = pg_finfo_rum_timestamptz_distance
        127   7E 000014A0 pg_finfo_rum_timestamptz_extract_query = pg_finfo_rum_timestamptz_extract_query
        128   7F 00001490 pg_finfo_rum_timestamptz_extract_value = pg_finfo_rum_timestamptz_extract_value
        129   80 00001510 pg_finfo_rum_timestamptz_key_distance = pg_finfo_rum_timestamptz_key_distance
        130   81 000014E0 pg_finfo_rum_timestamptz_left_distance = pg_finfo_rum_timestamptz_left_distance
        131   82 00001500 pg_finfo_rum_timestamptz_outer_distance = pg_finfo_rum_timestamptz_outer_distance
        132   83 000014F0 pg_finfo_rum_timestamptz_right_distance = pg_finfo_rum_timestamptz_right_distance
        133   84 00001570 pg_finfo_rum_timetz_compare_prefix = pg_finfo_rum_timetz_compare_prefix
        134   85 00001560 pg_finfo_rum_timetz_extract_query = pg_finfo_rum_timetz_extract_query
        135   86 00001550 pg_finfo_rum_timetz_extract_value = pg_finfo_rum_timetz_extract_value
        136   87 00001930 pg_finfo_rum_ts_distance_td = pg_finfo_rum_ts_distance_td
        137   88 00001910 pg_finfo_rum_ts_distance_tt = pg_finfo_rum_ts_distance_tt
        138   89 00001920 pg_finfo_rum_ts_distance_ttf = pg_finfo_rum_ts_distance_ttf
        139   8A 00001970 pg_finfo_rum_ts_join_pos = pg_finfo_rum_ts_join_pos
        140   8B 00001960 pg_finfo_rum_ts_score_td = pg_finfo_rum_ts_score_td
        141   8C 00001940 pg_finfo_rum_ts_score_tt = pg_finfo_rum_ts_score_tt
        142   8D 00001950 pg_finfo_rum_ts_score_ttf = pg_finfo_rum_ts_score_ttf
        143   8E 000018E0 pg_finfo_rum_tsquery_consistent = pg_finfo_rum_tsquery_consistent
        144   8F 00001900 pg_finfo_rum_tsquery_distance = pg_finfo_rum_tsquery_distance
        145   90 000018D0 pg_finfo_rum_tsquery_pre_consistent = pg_finfo_rum_tsquery_pre_consistent
        146   91 000018F0 pg_finfo_rum_tsquery_timestamp_consistent = pg_finfo_rum_tsquery_timestamp_consistent
        147   92 000018C0 pg_finfo_rum_tsvector_config = pg_finfo_rum_tsvector_config
        148   93 00001750 pg_finfo_rum_varbit_compare_prefix = pg_finfo_rum_varbit_compare_prefix
        149   94 00001740 pg_finfo_rum_varbit_extract_query = pg_finfo_rum_varbit_extract_query
        150   95 00001730 pg_finfo_rum_varbit_extract_value = pg_finfo_rum_varbit_extract_value
        151   96 00001800 pg_finfo_rumhandler = pg_finfo_rumhandler
        152   97 000017B0 pg_finfo_ruminv_extract_tsquery = pg_finfo_ruminv_extract_tsquery
        153   98 000017C0 pg_finfo_ruminv_extract_tsvector = pg_finfo_ruminv_extract_tsvector
        154   99 000017E0 pg_finfo_ruminv_tsquery_config = pg_finfo_ruminv_tsquery_config
        155   9A 000017D0 pg_finfo_ruminv_tsvector_consistent = pg_finfo_ruminv_tsvector_consistent
        156   9B 00001980 pg_finfo_tsquery_to_distance_query = pg_finfo_tsquery_to_distance_query

  Summary

        B000 .data
        1000 .pdata
        3000 .rdata
        1000 .reloc
        2000 .text

Действительно, функции rumhandler нет, есть схожая по названию pg_finfo_rumhandler.

Подскажите, пожалуйста, что делать что бы скомпилировать dll с внешней функцией rumhandler или что-то я не правильно понял в принципе.
PM MAIL   Вверх
xvr
Дата 25.7.2019, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Перед всеми экспортируемыми функциями в сорцах (или в rum.h) надо написать __declspec (dllexport) (оно же PGDLLEXPORT )- это особенности билда под Win

https://askvoprosy.com/voprosy/why-does-c-n...d-with-pg-finfo

Цитата(nnn2k @  25.7.2019,  02:48 Найти цитируемый пост)
Действительно, функции rumhandler нет, есть схожая по названию pg_finfo_rumhandler.

Должны быть обе



Это сообщение отредактировал(а) xvr - 25.7.2019, 15:47
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.1211 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.