0

我正在寻找适用于 OpenVMS 的 SQLite 的工作发行版。我尝试使用我在邮件列表中找到的补丁,从合并文件构建 SQLite 3.7.9,但它并不完全有效。

我在 OpenVMS Alpha 7.3-2 上使用 HP C V7.1-015。由于我无法安装似乎包含 SQLite3 的 python,我必须从源代码构建。

我使用以下命令进行编译:

$ CC /OPTIMIZE -
     /DEFINE=(SQLITE_THREADSAFE=0, -
              SQLITE_OMIT_LOAD_EXTENSION=1, -
              SQLITE_OMIT_COMPILEOPTION_DIAGS=1, -
              SQLITE_OMIT_MEMORYDB=1, -
              SQLITE_OMIT_TEMPDB=1, -
              SQLITE_OMIT_DEPRECATED=1, -
              SQLITE_OMIT_SHARED_CACHE=1, -
              _USE_STD_STAT=ENABLE) -
     /FLOAT=IEEE_FLOAT -
     sqlite3.c
$ CC /OPTIMIZE -
     /DEFINE=(SQLITE_THREADSAFE=0, -
              SQLITE_OMIT_LOAD_EXTENSION=1, -
              SQLITE_OMIT_COMPILEOPTION_DIAGS=1, -
              SQLITE_OMIT_MEMORYDB=1, -
              SQLITE_OMIT_TEMPDB=1, -
              SQLITE_OMIT_DEPRECATED=1, -
              SQLITE_OMIT_SHARED_CACHE=1, -
              _USE_STD_STAT=ENABLE) -
     /FLOAT=IEEE_FLOAT -
     shell.c

我从邮件列表中复制了定义,并添加了 /FLOAT=IEEE_FLOAT 以消除大多数关于浮点的警告(与指数 308 引起的溢出有关)。

在编译期间,我得到了一些信息和警告。链接时收到以下消息:

$ LINK shell.obj,sqlite3.obj
...
%LINK-W-NUDFSYMS, 2 undefined symbols:
%LINK-I-UDFSYM,         __STD_FSTAT
%LINK-I-UDFSYM,         __STD_STAT
...

由于我在这里有点迷失,我宁愿拥有在 OpenVMS 上编译的 SQLite3 源代码。

4

3 回答 3

4

您从链接器获得的具体问题源于您在编译时请求了系统没有的功能。我相信 _USE_STD_STAT 选项首先在 OpenVMS v8.2 中可用,但您使用的是 7.3-2。你的编译器和你的头文件知道当 _USE_STD_STAT 被定义时要做什么,但是在你的系统上的 C 运行时(VMS 中的 CRTL)中不存在处理 X/Open-compliant stat 结构的函数,并且你的链接器是告诉你,“没有这些功能。”

理想情况下,您将能够升级您的操作系统。在撰写本文时,当前版本是 v8.4。v7.3-2 是八年半前发布的,v8.2 是七年前发布的。我知道有技术、预算甚至政治原因导致升级并非总是可行的。如果是我,并且我被困在 OpenVMS Alpha v7.3-2 上,我会尝试从编译中删除 _USE_STD_STAT=ENABLE ,看看会发生什么。

启用 _USE_STD_STAT 的副作用之一是您还会获得 _LARGEFILE。如果这是 SQLite 需要该选项的唯一原因,您可能没问题,但仅限于 4GB 数据库。我怀疑它的作用远不止于此,即 SQLite 很可能会使用 stat 结构中确实需要更新结构的元素。

您可以在http://h71000.www7.hp.com/doc/84final/5763/5763profile_062.html#index_x_1699阅读传统和符合标准的统计结构的差异。

于 2012-04-22T23:18:46.017 回答
2

我最近改进了我的 SQLite VMSish 补丁,并使其可用于 SQLite 版本 3.7.14.1:http://www.mail-archive.com/sqlite-users@sqlite.org/msg73570.html (或http :// sqlite.1065341.n5.nabble.com/Building-SQLite-3-7-14-1-for-OpenVMS-td65277.html)。

POSIX 锁定仍然不起作用,我无法找出原因。

于 2012-11-07T17:21:00.753 回答
1

好吧,在 sqlite-users 邮件列表上有一条关于让 SQLite 3.7.9 在 OpenVMS 上运行的消息。我不知道这与您拥有的版本有多相关(或者该补丁是否被 SQLite 开发人员采用;出于法律原因 IIRC,他们有点挑剔),但它看起来可能很有用。祝你好运。

于 2012-04-10T10:44:09.720 回答