использование iodbc в Rust

Я пытаюсь подключиться к FileMaker через приложение Rust (не спрашивайте меня, почему ...) - и я натыкаюсь на стену драйвера FM ODBC, созданного для iodbc, а не unixodbc, но все ящики ODBC, которые я нахожу используют unixodbc.

Я не слишком знаком с вещами нижнего уровня, связанными с грузом, поэтому я понятия не имею, можно ли и как сделать так, чтобы ящики Rust odbc ссылались на iodbc вместо unixodbc. Я спросил у Google, но ничего не вышло.

Могу ли я заставить Cargo связываться с определенной библиотекой (в системе присутствуют как unixodbc, так и iodbc, но unixodbc, кажется, всегда выбирается по умолчанию)?


person Tom    schedule 04.03.2021    source источник
comment
Я верю, что это возможно, если вы используете cargo rustc и вручную свяжете iodbc. Я, однако, недостаточно осведомлен, чтобы знать, как это сделать, хотя использование подробного вывода может дать вам представление.   -  person Aiden4    schedule 05.03.2021
comment
@ Aiden4 может попробовать это, если я не найду другого решения. Хотя я даже не уверен, КАКОЙ из трех или четырех пакетов odbc действительно связан с библиотекой C. : - /   -  person Tom    schedule 06.03.2021
comment
Если он статически связан, вы, вероятно, сможете определить, какой из них выполняет связывание, просмотрев зависимости ящиков odbc в файле cargo.lock. Кроме того, если это не сработает, поищите ящик с extern "C" функциями.   -  person Aiden4    schedule 06.03.2021


Ответы (1)


В настоящее время все крейты ODBC Rusts используют odbc-sys для привязки к собственной библиотеке. Суффикс -sys - это идиоматическое обозначение системных привязок в сообществе. Я являюсь владельцем odbc-sys, поэтому я взял на себя смелость добавить функцию iodbc, когда столкнулся с вашим вопросом. На момент написания этой статьи в вашем Cargo toml должно работать следующее:

[dependencies]
odbc-api = "0.19.2"
odbc-sys = { version = "0.17.2", features = ["iodbc"] }

Без указания функции iodbc не будет использоваться, поскольку динамическая библиотека называется libiodbc.so, а не libodbc.so.

person Markus Klein    schedule 12.03.2021
comment
Отлично, спасибо. Я попробую это сделать, хотя сейчас это низкий приоритет из-за крайнего срока, и мне пришлось реализовать его с помощью JDBC и java вместо соблюдения крайнего срока. Но я бы предпочел иметь это в Rust, чем в Java. - person Tom; 13.03.2021
comment
Не волнуйся слишком сильно. Мне нужно было добавить только строки в odbc-sys, и я надеюсь, что это также пригодится другим людям. Если вы его попробуете, вы, скорее всего, будете первым, кто будет использовать этот диспетчер драйверов с привязками Rust, что означает, что вы зафрахтуете какую-то неизвестную территорию. Так что не стесняйтесь поднимать вопрос на GitHub, если у вас возникнут проблемы. - person Markus Klein; 13.03.2021