gpt4 book ai didi

c++ - 在 MacOS X 环境下通过 Virtuoso 的 ODBC/iODBC 将 Redland 连接到 Virtuoso

转载 作者:行者123 更新时间:2023-11-28 02:01:23 27 4
gpt4 key购买 nike

为了在我的 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.hrdf_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 库吗?提前致谢。

最佳答案

所有这些麻烦都是由于配置问题没有指南描述 AFIK(如果我错了请纠正我,我想找到有关 Virtuoso 和 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

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

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

VOS 是 ODBC 中的配置定义。此外,具体的 ContextNode 指定要使用哪个命名图。

关于c++ - 在 MacOS X 环境下通过 Virtuoso 的 ODBC/iODBC 将 Redland 连接到 Virtuoso,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39414756/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com