为了在我的MacOS X环境中安装Virtuoso,我使用了brew端口,即:
brew install virtuoso通过这样做,它自动安装了一些ODBC/iODBC驱动程序,其他任何unixodbc设置都不能过写这些驱动程序。特别是,如果我试图链接这样的库:
$ 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下载它。特别是,我使用了两种可能的配置:
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)如果我禁用或不禁用事务,无论如何,我在“rdf_storage_virtuoso.c”的第941行中得到了以下错误:
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:
$ 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库连接起来?提前谢谢。
发布于 2016-09-10 11:20:36
所有这些问题都是由于的配置问题造成的,AFIK在“无指南”中对此进行了描述(如果我错了,请纠正我,我希望找到更多关于Virtuoso和Redland/librdf的详细信息)。因此,正如我在评论中所说的,问题在ODBC中,但原因是没有任何Virtuoso指南提到如何配置它们的驱动程序。这就是我们要走的路:
/图书馆/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因此,即使是通过Redland访问所需的配置参数也必须更改。
storage=librdf_new_storage(world, "virtuoso","db1","dsn='VOS',user='dba',password='dba'");其中VOS是ODBC中的配置定义。此外,特定的ContextNode指定要使用的命名图。
发布于 2016-09-09 15:57:53
我对brew不太了解,但是否可以修改它的包定义,使其重命名我们的isql二进制文件,例如改为isql?
我们已经在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=必须指向碘in的副本,而不是virtuoso (您可以从http://iodbc.org/获得它,或者您的发行版可能有一个包,例如debian/ubuntu上的libiodbc2-dev );virtuoso的isql测试到虚拟主机的直接连接;检查驱动程序管理器是否配置正确,使用iodbctest (或者unixODBC的isql,它首先导致了上述冲突)。
发布于 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中很快找到这种方式,但也许您可以吗?
https://stackoverflow.com/questions/39414756
复制相似问题