1

更新:好的,我在此页面上找到了它:您必须使用 --enable-mono 参数运行 ./configure。然后,您还会发现缺少一些没有在任何地方提及的依赖项。

可悲的是,这给我留下了另一个我无法解决的问题。由于我们这里还有未完成的赏金,所以让我们问这个。

在执行 ./autogen 和 ./configure --enable_mono 之后(在代码分支develop/6 和develop/7 上尝试过),我收到以下错误:

libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I../../libsrc/Dk -fno-strict-aliasing -O2 -DMONO_USE_EXC_TABLES -fexceptions -D_REENTRANT -D_GNU_SOURCE -Wall -DNDEBUG -DPOINTER_64 -I/usr/local/src/virtuoso-opensource/libsrc/Xml.new -DOPENSSL_NO_KRB5 -Dlinux -D_GNU_SOURCE -DFILE64 -D_LARGEFILE64_SOURCE -I../../binsrc/mono/mono-1.1.7/libgc/include -I../../libsrc -I../../libsrc/Dk -DNO_UDBC_SDK -DUSE_INCLUDED_LIBGC=1 -g -O2 -MT libthrp_gc_la-sched_pthread_gc.lo -MD -MP -MF .deps/libthrp_gc_la-sched_pthread_gc.Tpo -c sched_pthread_gc.c  -fPIC -DPIC -o .libs/libthrp_gc_la-sched_pthread_gc.o
sched_pthread_gc.c:42:22: fatal error: gc_typed.h: No such file or directory
compilation terminated.
make[2]: *** [libthrp_gc_la-sched_pthread_gc.lo] Error 1
make[2]: Leaving directory `/usr/local/src/virtuoso-opensource/libsrc/Thread'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/usr/local/src/virtuoso-opensource/libsrc'
make: *** [all-recursive] Error 1

此链接包含有问题文件的内容。如果我删除 forgc_typed.h的导入,则找不到下一个导入。我只是做了sudo apt-get install libgc-dev哪些工作。Make 仍然给我同样的错误。我相信这个文件周围的某个地方和这个编译错误被埋没了,但我无法修复它。

我是 Linux 菜鸟,有人可以给我建议这里可能是什么问题或如何解决它?

附加信息: 1.ldconfig -v -p明确表示 libgc.so 存在,那么这个 make 脚本为什么要寻找头文件?

...
libgdbm_compat.so.3 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libgdbm_compat.so.3
libgdbm.so.3 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libgdbm.so.3
libgd.so.2 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libgd.so.2
libgcrypt.so.11 (libc6,x86-64) => /lib/x86_64-linux-gnu/libgcrypt.so.11
libgccpp.so.1 (libc6,x86-64) => /usr/lib/libgccpp.so.1
libgccpp.so (libc6,x86-64) => /usr/lib/libgccpp.so
libgcc_s.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libgcc_s.so.1
libgc.so.1 (libc6,x86-64) => /usr/lib/libgc.so.1
libgc.so (libc6,x86-64) => /usr/lib/libgc.so
libgamin-1.so.0 (libc6,x86-64) => /usr/lib/libgamin-1.so.0
libgailutil.so.18 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libgailutil.so.18
libfuse.so.2 (libc6,x86-64) => /lib/libfuse.so.2
...
  1. 为了安装支持 Mono 的 Virtuoso,我使用了以下教程:

  2. Virtuoso 之前一直在工作,我只是没有让 Virtuoso 使用 --enable-mono 构建。Mono 运行良好,可以毫无问题地构建和执行 dll 和 exe。.

.

.

原始问题:

我在 Ubuntu 服务器上安装了 Virtuoso 和 Mono,并使用本教程将 sanity.cs 类编译为 sanity.dll 文件。当我尝试导入“向量”时,我收到一条消息:

SQLState: 42001
Message: SR185: Undefined procedure DB.DBA.import_clr.

这是否意味着我将 .dll 放在了错误的位置?还是我安装了错误的 Virtuoso 版本?

我使用 apt-get 安装 Virtuoso 和 Mono。

更新:好的,Virtuoso 的 apt-get 版本太旧了。OpenLink Twitter 帐户告诉我,新版本应该从 Github 帐户构建。

现在我按照https://github.com/openlink/virtuoso-opensource上的自述文件在 Ubuntu 上构建了 Virtuoso ,但这并没有解释如何以任何方式集成 Mono。

  • 我已经使 sanity.cs Hello World 文件工作,确认 Mono 设置正确。
  • 服务器运行,但 Virtuoso.ini 中的 Mono 部分为空:

.

[Mono]
;MONO_TRACE                     = Off
;MONO_PATH                      = <path_here>
;MONO_ROOT                      = <path_here>
;MONO_CFG_DIR                   = <path_here>
;virtclr.dll                    =

我将默认路径放在此文件中,如下所示:

[Mono]
;MONO_TRACE                     = Off
;MONO_PATH                      = /usr/bin/mono
;MONO_ROOT                      = /usr/lib/mono
;MONO_CFG_DIR                   = /etc/mono
;virtclr.dll                    =

我的系统上不能find有 virtclr.dll。我怎样才能生成它?有人可以帮助我提供一个链接,解释如何在 Virtuoso 中集成 Mono 或告诉我如何继续吗?我应该用不同的设置构建 Virtuoso 吗?

4

1 回答 1

2

这有点乱。它取决于mono-1.1.7,并且在尝试使用它所依赖的项目之前不会构建它;所以构建很混乱。我强烈怀疑开发人员没有构建/测试他们项目的这方面。

您需要mono-1.1.7手动下载 - 这是因为 mono tarball 的位置不是他们认为的位置。例如来自:

wget -O binsrc/mono/mono-1.1.7.tar.gz ftp://ftp1.freebsd.org/mirror/FreeBSD-Archive/ports/distfiles/mono-1.1.7.tar.gz

如果你没有 wget,那么你可以使用 curl:

curl -o binsrc/mono/mono-1.1.7.tar.gz ftp://ftp1.freebsd.org/mirror/FreeBSD-Archive/ports/distfiles/mono-1.1.7.tar.gz

运行配置:

./configure --enable-mono

交换binsrc和中的libsrc子目录的顺序Makefile

sed -i 's/libsrc binsrc/binsrc libsrc/' Makefile

运行 make (如果你想让它更快,请使用 -j 选项,例如 -j2):

make

构建将失败。不要恐慌。再次交换 binsrc 和 libsrc :

sed -i 's/binsrc libsrc/libsrc binsrc/' Makefile

并重新运行make:

make

此时构建应该成功。

请记住,它使用 mono-1.1.7 的私有副本,并且大多数现代 linux 发行版使用 2.0,因此可能与此存在一些冲突。

于 2013-04-09T16:02:41.393 回答