在Ubuntu上构建Virtuoso(使用Mono集成):在libgc上构建错误

时间:2013-03-07 15:04:14

标签: c++ linux ubuntu mono virtuoso

更新:好的,我在this page上找到了它:你必须使用--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

This link包含有问题文件的内容。如果我删除gc_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来构建。单声道效果很好,可以毫无问题地构建和执行dll和exes。

  3.   

    原始问题:

         

    我在Ubuntu服务器上安装了Virtuoso和Mono,并且using this tutorial将sanity.cs类编译为sanity.dll文件。当我   尝试导入'vector'我收到了一条消息:

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

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

         

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

         

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

         

    现在我按照自述文件在Ubuntu上构建了Virtuoso   https://github.com/openlink/virtuoso-opensource,但事实并非如此   解释如何以任何方式集成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。我该如何生成它?能够   有人帮我解释了如何整合Mono的链接   Virtuoso或告诉我如何进行?我应该用Virtuoso制作   不同的设置?

1 个答案:

答案 0 :(得分:2)

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

您需要手动下载mono-1.1.7 - 这是因为单声道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:

./configure --enable-mono

交换binsrclibsrcMakefile子目录的顺序:

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,因此可能存在一些冲突。