2016-09-09 2 views
0

Чтобы установить Виртуоз на моей среде MacOS X, я использовал порт заваривания, то есть:Подключение Redland к виртуоз через виртуоз в ODBC/iODBC на MacOS X Окружающая среда

brew install virtuoso 

Поступая таким образом, он автоматически устанавливается некоторые драйверы ODBC/iODBC, которые не могут быть перезаписаны никакими другими установками unixodbc. В частности, если я попытаюсь соединить такую ​​библиотеку:

Кстати, я не хочу отсоединять эту версию. Поэтому я попытался скомпилировать Redland с нуля и загрузить его из GitHub. В частности, я использовал две возможные конфигурации:

env PKG_CONFIG_PATH=/usr/local/lib/pkgconfig ./configure --with-virtuoso --with-odbc=/usr/local/Cellar/virtuoso/7.2.4.2 
env PKG_CONFIG_PATH=/usr/local/lib/pkgconfig ./configure --with-virtuoso --with-iodbc=/usr/local/Cellar/virtuoso/7.2.4.2 

После добавления rdf_hash_internal.h и rdf_heuristics.h в моем проекте вручную, все просто идет гладко, и все становится как компилируется и связаны между собой. В моем приложении C++, я пытаюсь получить доступ к базе данных с помощью следующего кода:

world = librdf_new_world(); 
librdf_world_open(world); 
storage = librdf_new_storage(world,"virtuoso",graphName.c_str(),"dsn='Local Virtuoso',user='dba',password='dba'"); 
model = librdf_new_model(world,storage,NULL); 
context_node = librdf_new_node_from_uri_string(world,(const unsigned char*)defaultContext.c_str()); 
/* librdf_model_transaction_commit(this->super->model) */ 
librdf_model_size(super->model) 

Если либо отключить сделку или нет, во всяком случае, я получил следующее сообщение об ошибке в строке 941 «rdf_storage_virtuoso.c»:

rc = SQLDriverConnect(connection->hdbc, 0,(UCHAR *) context->conn_str, 
         SQL_NTS, context->outdsn, 
         LIBRDF_VIRTUOSO_CONTEXT_DSN_SIZE, 
         &buflen, SQL_DRIVER_COMPLETE); 

Следовательно, я предполагаю, что на уровне ODBC/iODBC существует ошибка соединения. Кстати, я мог бы подключиться к виртуоз с помощью следующей команды:

$ isql localhost:1111 dba dba 
Connected to OpenLink Virtuoso 
Driver: 07.20.3217 OpenLink Virtuoso ODBC Driver 
OpenLink Interactive SQL (Virtuoso), version 0.9849b. 
Type HELP; for help and EXIT; to exit. 
SQL> 

Есть ли способ подключить библиотеку Redland с библиотекой ODBC с помощью Виртуоз? Заранее спасибо.

ответ

1

Все эти проблемы были из-за проблем конфигурации, Afik была описана ни в руководстве (Поправьте меня, если я ошибаюсь, я хотел бы найти более подробную информацию о как виртуоз и Redland/librdf). Настоящим, как я сказал в комментариях, проблема была в ODBC, но причина в том, что в руководстве Virtuoso нет упоминания о том, как настроить свой драйвер. Это путь:

/Library/ODBC/odbc.ini

[ODBC Data Sources] 
VOS = virtuoso-odbc 

[VOS] 
Driver = /usr/local/Cellar/virtuoso/7.2.4.2/lib/virtodbc.so 
Description = Virtuoso Open-Source Edition 
Address = localhost:1111 
UserName = dba 
User  = dba 

/Library/ODBC/odbcinst.ini

[ODBC Drivers] 
virtuoso-odbc = Installed 

[virtuoso-odbc] 
Driver = /usr/local/Cellar/virtuoso/7.2.4.2/lib/virtodbc.so 

Следовательно, даже конфигурация параметры, необходимые для доступа через Редленд, должны измениться.

storage=librdf_new_storage(world, "virtuoso","db1","dsn='VOS',user='dba',password='dba'"); 

Где ВОС является определение конфигурации в пределах ODBC. Кроме того, конкретный контекст ContextNode указывает, который будет использоваться именованный график.

+1

Учитывая вышеизложенное, я рекомендую вам загрузить и установить [предварительно скомпилированный набор клиентских подключений] (http://opldownload.s3.amazonaws.com/uda/virtuoso/7.2 /universal-apple-macosx10.7-32/mwvcz2zz.dmg) - который поддерживает как графический интерфейс, так и инструменты командной строки и [свободно лицензируется для использования как с открытым исходным кодом, так и с коммерческим выпуском] (http: //virtuoso.openlinksw. ком/DataSpace/док/DAV/вики/Главная/VOSLicense # Клиент% 20Protocol% 20Driver% 20exemptions% 20from% 20GPL). Конфигурация DSN через GUI iODBC Administrator довольно проста. – TallTed

+0

Спасибо за подсказку. Теперь, когда я знаю, как настроить iODBC и Redland, все работает. – jackb

+1

Тем не менее, пара важных строк odbc.ini неверна. 'VOS = Virtuoso' должен быть' VOS = virtuoso-odbc'. 'Driver = virtuoso-odbc' должен быть' Driver =/usr/local/Cellar/virtuoso/7.2.4.2/lib/virtodbc.so'. И вам не хватает строфы '[ODBC Drivers]' в 'odbcinst.ini', которая должна иметь одну строку, а именно' virtuoso-odbc = Installed' – TallTed

1

Я не знаю много о вареве, но можно ли изменить его определение пакета, чтобы он переименовал наш isql-бинарный файл, например. вместо isql-vt?

Мы уже делаем это в нашей упаковке Debian/Ubuntu по телефону

./configure  --program-transform-name='s/isql$$/isql-vt/;s/isqlw/isqlw-vt/' 

См https://github.com/openlink/virtuoso-opensource/blob/develop/7/debian/rules#L31

Я не вижу ошибку вы получаете от линии 941, но две вещи, касающиеся подключения ODBC: 1) ваш --with-iodbc= должен указывать на копию iodbc, а не на виртуоз (вы можете получить его от http://iodbc.org/ или у вашего распространения, вероятно, есть пакет, например, libiodbc2-dev на debian/ubuntu) 2) Virtuoso's isql проверяет прямое подключение к vir tuoso; чтобы убедиться, что диспетчер драйверов настроен правильно, используйте iodbctest (или unixODBC isql, что вызвало конфликт выше в первую очередь).

+0

Я говорю это, потому что в этой ссылке есть версия odbc (см. Ссылку выше), которая используется в Mac в качестве библиотеки по умолчанию. Следовательно, в этой папке есть несколько библиотек. Либо я помещаю этот путь, либо нет, я получаю одну и ту же ошибку odbc. – jackb

+0

Если я делаю то же самое с iodbctest, я получаю аналогичную ошибку в отношении драйвера, то же самое, что я получаю от своего приложения. – jackb

+0

Я даже пытался связаться с/usr/lib/iODBC, но я получаю ту же ошибку в отношении драйвера. Я предполагаю, что у Virtuoso есть свои собственные драйверы в этом каталоге, я отредактировал odbc, чтобы проверить, не хватает ли отсутствующих драйверов определенной ссылки в этой папке, но ничего хорошего не произошло. В любом случае, я получаю такую ​​же ошибку. – jackb

0

Первое, iODBC это менеджер драйверов ODBC Apple builds into OS X, и пользователи, как правило, лучше придерживаться с ней - хотя мы (OpenLink Software, автогрейдеры из iODBC) рекомендуем updating to the curent version, так как Apple, позади, как правило, много обновлений.

В связи с этим Apple не связывает full iODBC SDK. Они, помимо прочего, оставляют рамки.

В целом, UnixODBC не полностью интегрируется с приложениями или драйверами OS X с графическим интерфейсом GUI, и с течением времени возникают другие проблемы. Текущий iODBC не заботится о том, работаете ли вы в графическом интерфейсе или в командной строке, Carbon или Cocoa, 32-битном или 64-битном ...Все это работает (и if it doesn't work, we want to know, so we can fix it).

MacPorts и другие пакеты, которые я использовал, имели способы переключения между UnixODBC и iODBC (например, variants); Я не могу быстро найти такое для Homebrew, но, может быть, вы можете?

+0

Если честно, я не думаю, что это проблема iODBC/ODBC. Это правда, что моя проблема заключается в связи между Redland и Virtuoso, но у меня такая же проблема даже в Linux (я портировал свой код на этой платформе, и та же проблема появляется). Таким образом, на данный момент это больше проблема конфигурации Virtuoso, которая не может связываться с ODBC, чем проблема самого ODBC. Но я только принимаю обоснованное предположение ... – jackb

Смежные вопросы