1
votes

UPDATE: Okay, I found it on this page: you have to run ./configure with the --enable-mono parameter. Then you'll also find out that some more dependencies are missing that aren't mentioned anywhere.

Sadly, this leaves me with another problem I cannot solve. As we still have the unfinished bounty here, let's ask this.

After doing ./autogen and ./configure --enable_mono (tried it on the code branches develop/6 and develop/7), I get the following error:

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 has the contents of the problematic file. If I remove the import for gc_typed.h, the next import is not found. I just did sudo apt-get install libgc-dev which worked. Make still gives me the same error. I believe somewhere around this file and this compilation the error is buried, but I can't fix it.

I'm a Linux noob, can somebody give me advice what might be the problem here or how to solve it?

Additional Information: 1. ldconfig -v -p clearly says that libgc.so exists, so why is this make script looking for the header?

...
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. To install Virtuoso with Mono support, I used the following tutorials:

  2. Virtuoso has been working before, I just don't get Virtuoso to build with --enable-mono. Mono works well, can build and execute dlls and exes without a problem. .

.

.

ORIGINAL QUESTION:

I installed Virtuoso and Mono on a Ubuntu server and using this tutorial compiled the sanity.cs class to a sanity.dll file. When I tried importing the 'vector' I got a message:

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

Does that mean that I put the .dll in the wrong place? Or do I have the wrong version of Virtuoso installed?

I used apt-get to install Virtuoso and Mono.

UPDATE: Okay, the apt-get version of Virtuoso was waaay too old. The OpenLink Twitter account told me that the new versions should be built from the Github account.

Now I built Virtuoso on Ubuntu following the readme on https://github.com/openlink/virtuoso-opensource, but that doesn't explain how to integrate Mono in any way.

  • I already made the sanity.cs Hello World file work, confirming that Mono is setup correctly.
  • The server runs, but the Mono section in the Virtuoso.ini is empty:

.

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

I put the default paths in this file like this:

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

I cannot find a virtclr.dll on my system. How can I generate it? Can someone help me with a link explaining how to integrate Mono in Virtuoso or tell me how to proceed? Should I have built Virtuoso with different settings?

1

1 Answers

2
votes

It's a bit of a mess. It depends on mono-1.1.7, and it doesn't build it before trying to use items that it depends on; so the build is messy. I would strongly suspect that the developers are not building/testing this aspect of their project.

You need to download mono-1.1.7 manually - this is because the location of the mono tarball is not where they think it is.; e.g. from:

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

if you don't have wget, then you can use 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

run configure:

./configure --enable-mono

Swap the order of the binsrc and libsrc subdirectories in the Makefile:

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

run make (use a -j option if you want to make it faster e.g. -j2):

make

The build will fail. Do not panic. Swap binsrc and libsrc again:

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

and re-run make:

make

The build should succeed at this point.

Bear in mind, it uses a private copy of mono-1.1.7, and most modern linux distros use 2.0, so there could be some conflicts with this.