BuildingTheFactJniLibrary

From Protege Wiki
Jump to: navigation, search

Handling Problems with FaCT++ not Finding Libraries

Building The FaCT++ jni library

Because FaCT++ is written in C++, it is a little harder to get it to compile properly across platforms. In particular, a user may see errors such as

Link (dyld) error:
Symbol not found: _clock$UNIX2003

or a java.lang.UnsatisfiedLinkError with a message similar to the following

libFaCTPlusPlusJNI.so: /usr/lib/libstdc++.so.6: version `GL IBCXX_3.4.9' not found (required by libFaCTPlusPlusJNI.so)

This happens because the version of FaCT++ that was compiled into the Protege 4 owl editor is not compatible with the libraries in the users operating system. If this happens on a windows or an OS X machine then send a message to the P4 mailing list because the developers probably should fix this situation. (If you are not subscribed to this list look at this web page.) However on a linux or other operating system this is much more difficult because there are too many different variants. In this case you will probably have to build you own version of FaCT++. Hence we added the following page to make the work a little easier.


The C++ compile

On Ubuntu I used

   export CPLUS_INCLUDE_PATH=${JAVA_HOME}/include:${JAVA_HOME}/include/linux
   sudo apt-get install libxerces-c2-dev

The Java Compile

There is no build file for the java file so we go back to basic java commands. Set the owlapi variable to the location of the owlapi jar file, e.g.

owlapi=~/dev/workspaces/protege4/owleditor/plugins/org.semanticweb.owl.owlapi/lib/owlapi-bin.jar

Then the command line

javac -cp $owlapi -d classes -g `find FaCT++.Java -name "*.java"`

works - though there were some compile errors that were easily fixed and I agreed with the compiler. Then

cd classes
jar -cf ../FaCTPlusPlus.jar `find . -name "*.class"`

finishes the job.

Troubleshooting

The xerces C Library Home Page