2014-01-24 2 views
2

Мне нужно скомпилировать плагин полнотекстового парсера в Windows, но я не могу рассчитать его даже с помощью исходного примера источника MySQL. Версия MySQL Server составляет 5,6 x 64. С НКОЙ я попытался вариация:Как скомпилировать MySQL пример плагина в Windows

gcc -shared -Wall -g -o "plugin_example.dll" -fPIC "plugin_example.c" -DMYSQL_DYNAMIC_PLUGIN -lmysqlservices 

, но когда я пытаюсь установить его

INSTALL PLUGIN simple_parser SONAME 'plugin_example.dll' 

Я получаю следующее сообщение об ошибке

Can't open shared library '... plugin_example.dll' (errno: 193) 

С Dev-C и его (зачищенной -L LIBS)

gcc.exe -c projekt3.c -o projekt3.o -DMYSQL_DYNAMIC_PLUGIN -DBUILDING_DLL=1 
dllwrap.exe --output-def libProjekt3.def --implib libProjekt3.a projekt3.o -static-libgcc -lmysqlservices --no-export-all-symbols --add-stdcall-alias -o Projekt3.dll 

Я получаю 250K DLL и

Can't find symbol '_mysql_plugin_interface_version_' in library 

Пять дней с ошибкой в ​​пробной ошибке ни к чему не приводят меня. Любая помощь будет оценена по достоинству.

+1

googling сообщает, что errno 193 означает неправильный формат файла, возможно, несоответствие между вашим 64-битным Mysql и .dll. Можете ли вы либо попробовать с 32-разрядным Mysql, либо скомпилировать плагин для 64-битной версии, либо проверить, есть ли в процедуре установки некоторые предположения о 64 или 32 бит? – sqlab

+0

@sqlab Thats it! Неделя пробуждения не-чувств только из-за этого. Пожалуйста, опубликуйте это как полный ответ (возможно, со ссылкой на err: 193). Поэтому я могу отметить это как принятый ответ. –

ответ

2

errno 193 означает неправильный формат файла.
Возможно, существует несогласованность между вашим 64-битным MySQL и DLL. Большинство страниц из Google говорят о несовместимых 32-битных и 64-битных версиях Java.
Так что я рекомендую либо пытаться с 32-разрядной MySQL, компилируя плагин для 64-битной, либо проверяя, есть ли в процедуре установки некоторые предположения о 64 или 32 бит?

+0

Компиляция с коммутатором mingw64 и -m64 сделала трюк. Ссылка на страницу о x86/64 incompatibilites в общих библиотеках была бы оценена. –

+0

У меня нет действительных ссылок, просто подсказки, например. https://resource.microstrategy.com/Forum/ReplyListPage.aspx?id=32839 – sqlab

-1

Взять дикую догадку здесь, но скопировали ли вы скомпилированную dll в каталог плагинов mysql?

выполнить запрос SHOW VARIABLES LIKE 'plugin%', чтобы определить, где копировать dll в.

Найти скомпилированную DLL и скопировать ее в каталог, указанный в запросе. Затем попробуйте INSTALL PLUGIN simple_parser SONAME 'plugin_example.dll'

Также убедитесь, что у вашего пользователя MySQL есть разрешения на чтение/просмотр/выполнение DLL.

В зависимости от плагина вместо INSTALL PLUGIN simple_parser SONAME 'plugin_example.dll' вы можете также попробовать: CREATE FUNCTION simple_parser RETURNS INTEGER SONAME 'simple_parser.dll';

Ошибка _mysql_plugin_interface_version_ обычно означает, что ваша версия MySQL не был скомпилирован с поддержкой плагинов, но вы получите ошибку, не используя -shared с GCC, так как Я предполагаю, что вы установили с помощью выпуска mysql с официального сайта, это не должно быть так.

+0

Спасибо за ответ, я проверил путь к плагину несколько раз. Все хорошо. Это другой код ошибки, если файл не найден (126). CREATE FUNCTION возвращает мне ту же ошибку 193. Дядя Google говорит, что ошибка _mysql_plugin_interface_version_ обычно присутствует, если -DMYSQL_DYNAMIC_PLUGIN не передается компилятору. Но это в моей среде Dev C. –

+0

Единственное, что я могу придумать, это включить файл include. Вот прямая копия того, как я скомпилирую свои плагины в Linux из каталога исходного файла. 'gcc -shared -fPIC -I/usr/local/include/mysql -L/usr/lib/mysql -L/usr/local/lib/mysql -I/usr/include/mysql -o damlev.so ./damlev .cpp' Аналогично тому, как @Gaurav Joseph упоминает ниже. Затем я копирую файл so/dll в каталог плагинов, затем chmod (изменение) разрешений, чтобы mysql мог получить к нему доступ. – fyrye

1

я нашел маленький образец здесь: http://www.clusterdb.com/mysql/creating-a-mysql-plugin-to-produce-an-interger-timestamp

В основном это для системы Никс, но вы могли бы сделать то же самое на Windows.

gcc -Idrive:\path\to\mysql\include\ -fPIC -shared -o plugin_example.dll plugin_example.c

Затем скопируйте его в плагин Lib

диск: \ путь \ к \ MySQL \ Lib \ плагин \

затем создать функцию следующим образом:

create function inttime RETURNS REAL SONAME 'plugin_example.dll';

Здесь вы можете найти целую шестую ссылку: http://dev.mysql.com/doc/refman/5.6/en/udf-compiling.html