首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MacOS X环境下通过Virtuoso的ODBC/iODBC连接Redland和Virtuoso

在MacOS X环境下通过Virtuoso的ODBC/iODBC连接Redland和Virtuoso
EN

Stack Overflow用户
提问于 2016-09-09 15:14:07
回答 3查看 237关注 0票数 0

为了在我的MacOS X环境中安装Virtuoso,我使用了brew端口,即:

代码语言:javascript
复制
brew install virtuoso

通过这样做,它自动安装了一些ODBC/iODBC驱动程序,其他任何unixodbc设置都不能过写这些驱动程序。特别是,如果我试图链接这样的库:

代码语言:javascript
复制
$ brew link unixodbc
Linking /usr/local/Cellar/unixodbc/2.3.4...
Error: Could not symlink bin/isql
Target /usr/local/bin/isql
is a symlink belonging to virtuoso. You can unlink it:
  brew unlink virtuoso

To force the link and overwrite all conflicting files:
  brew link --overwrite unixodbc

To list all files that would be deleted:
  brew link --overwrite --dry-run unixodbc

顺便说一下,我不想取消这个版本的链接。因此,我尝试从零开始编译Redland并从GitHub下载它。特别是,我使用了两种可能的配置:

代码语言:javascript
复制
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.hrdf_heuristics.h之后,一切都进行得很顺利,所有事情都会被编译和链接。在我的C++应用程序中,我试图使用以下代码访问数据库:

代码语言:javascript
复制
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)

如果我禁用或不禁用事务,无论如何,我在“rdf_storage_virtuoso.c”的第941行中得到了以下错误:

代码语言:javascript
复制
rc = SQLDriverConnect(connection->hdbc, 0,(UCHAR *) context->conn_str,
                      SQL_NTS, context->outdsn,
                      LIBRDF_VIRTUOSO_CONTEXT_DSN_SIZE,
                      &buflen, SQL_DRIVER_COMPLETE);

因此,我想在ODBC/iODBC级别上有一个连接错误。顺便说一句,我可以使用以下命令连接到virtuoso:

代码语言:javascript
复制
$ 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>

有没有办法通过Virtuoso将Redland库与ODBC库连接起来?提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-09-10 11:20:36

所有这些问题都是由于的配置问题造成的,AFIK在“无指南”中对此进行了描述(如果我错了,请纠正我,我希望找到更多关于Virtuoso和Redland/librdf的详细信息)。因此,正如我在评论中所说的,问题在ODBC中,但原因是没有任何Virtuoso指南提到如何配置它们的驱动程序。这就是我们要走的路:

/图书馆/ODBC/odbc.ini

代码语言:javascript
复制
[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

代码语言:javascript
复制
[ODBC Drivers]
virtuoso-odbc = Installed

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

因此,即使是通过Redland访问所需的配置参数也必须更改。

代码语言:javascript
复制
storage=librdf_new_storage(world, "virtuoso","db1","dsn='VOS',user='dba',password='dba'");

其中VOS是ODBC中的配置定义。此外,特定的ContextNode指定要使用的命名图。

票数 2
EN

Stack Overflow用户

发布于 2016-09-09 15:57:53

我对brew不太了解,但是否可以修改它的包定义,使其重命名我们的isql二进制文件,例如改为isql?

我们已经在Debian/Ubuntu打包中通过调用

代码语言:javascript
复制
./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=必须指向碘in的副本,而不是virtuoso (您可以从http://iodbc.org/获得它,或者您的发行版可能有一个包,例如debian/ubuntu上的libiodbc2-dev );virtuoso的isql测试到虚拟主机的直接连接;检查驱动程序管理器是否配置正确,使用iodbctest (或者unixODBC的isql,它首先导致了上述冲突)。

票数 1
EN

Stack Overflow用户

发布于 2016-09-09 17:19:41

首先,iODBC是ODBC驱动程序管理器Apple内置到OS中,用户通常最好还是坚持使用它--尽管我们(OpenLink软件,iODBC的维护人员)推荐更新到当前版本,因为苹果通常会有很多更新。

与此相关的是,苹果并没有捆绑全iODBC SDK。除其他外,它们忽略了框架。

一般来说,UnixODBC并没有完全集成到GUI空间OS应用程序或驱动程序中,而且随着时间的推移,还会出现各种其他问题。当前的iODBC不管你是在图形用户界面或命令行,碳还是可可,32位或64位.这一切都很有效(和如果它不起作用,我们想知道,所以我们可以修复它)。

MacPorts和我使用过的其他打包器已经有了在UnixODBC和iODBC (例如variants)之间切换的方法;我无法在Homebrew中很快找到这种方式,但也许您可以吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39414756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档