Уважаемые коллеги!
К сожалению не имею опыта в разработке под C/C++ и тем более библиотек. Цели изучить данный язык сейчас не стоит, в связи с чем прошу подсобить знающих в вопросе.
Занимаюсь разработкой в PostgreSQL, в котором появилась необходимость установить расширение - индекс для полнотекстового поиска Rum.
Установка производится из под Postgres
ОШИБКА: не удалось открыть управляющий файл расширения "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 https://www.2ndquadrant.com/en/blog/compiling-postgresql-extensions-visual-studio-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 или что-то я не правильно понял в принципе. |