0

I am compiling a theorem prover on cygwin and I get this error:

$ make
ocamlmklib -o bin/minisatinterface minisat/core/Solver.o minisat/simp/SimpSolver
.o bin/Ointerface.o -lstdc++
** Fatal error: Error while reading minisat/core/Solver.o: Sys_error("Invalid ar
gument")
Makefile:49: recipe for target `bin/libminisatinterface.a' failed
make: *** [bin/libminisatinterface.a] Error 2

It is not clear what kind of invalid argument is here?

The only documentation I have found for ocamlmklib did not help on understanding the error message. Could it not read the file itself or there is a problem with the contents? ls does list the file:

$ ls -l minisat/core/Solver.o
-rw-r--r-- 1 gbuday mkpasswd 2096 jan.  22 10.42 minisat/core/Solver.o

update: if I remove Solver.o I get a different error message:

** Fatal error: Cannot find file "minisat/core/Solver.o"

So the above error message is about the contents of the object file.

Gergely
  • 6,879
  • 6
  • 25
  • 35
  • Are all files present? – Jonathan Protzenko Jan 22 '14 at 15:32
  • run `ocamlmklib` with `-verbose` flag and `-ccopt -v` to see all commands being executed by ocaml and c compilers – ygrek Jan 22 '14 at 16:59
  • @ygrek: do you mean using `ocamlmklib -verbose -ccopt -v -o bin/minisatinterface` etc.? it said + flexlink -chain cygwin -merge-manifest -stack 16777216 -o bin/dllminisatinterf ace.so minisat/core/Solver.o minisat/simp/SimpSolver.o bin/Ointerface.o -lstd c++ ** Fatal error: Error while reading minisat/core/Solver.o: Sys_error("Invalid argument") – Gergely Jan 23 '14 at 13:50

1 Answers1

0

I happen to know that this specifically has to do with the build of the ATP Satallax, which can be used with Isabelle Sledgehammer, and I was asked to look at this.

I have no expertise with make files and ocaml. My success at building Satallax v2.7 came purely from following the instruction in INSTALL, with some minimal ability at guessing at what error codes meant, which I mainly needed when building Satallax v2.6 over a year ago.

The first important thing to do is make sure that the tar file is unzipped while working in a Cygwin terminal, rather than under Windows with something like WinZip.

Assuming that you're working in a Cygwin terminal, these are the notes which I made. After that I'll include text from the Satallax INSTALL, and few comments.

Sources: http://www.ps.uni-saarland.de/~cebrown/satallax/

0) tar xvzf satallax-2.7.tar.gz

1) Cygwin Package (these are also for other's like Leo-II): 
     zlib-devel, make, OCaml devel, gcc devel, g++ devel, libstdc++6-devel
   Ubuntu 12 Packages:
     sudo apt-get install build-essential
   zlibg-dev using the Ubuntu Software Center
   ocaml and g++ if they don't come with "build-essential"

2) Put eprover.exe in the path so that ./configure can find it.
   a) There are the following lines in the configure files, which shows
      that it's configured to find picomus, eprover has to be in the path
      or `which eprover` has to be edited.
        # Optionally set picomus to your picomus executable
        picomus=${PWD}/picosat-936/picomus
        # Optionally set eprover to your E theorem prover executable
        eprover=`which eprover`

3) Follow the instructions in INSTALL.
   a) export MROOT=`pwd` takes care of this next note, which I had to do
      for v2.6, info I keep in here in case I need it in the future.
   b) export MROOT=<minisat-dir>, where you replace "minisat-dir" with the 
      /cygdrive/e\E_2\binp\isaprove\satallax-2.6\cygwin\minisat

3) OLD v2.6 NOTE: If you get an error, delete the old source and try 
   untaring the sources again.

My build of v2.7 went through without problems, other than the test giving errors.

With Satallax v2.7, there is now the requirement that the build find the eprover. Note STEP 3 of INSTALL tells you to modify configure, or put eprover.exe in the path before the build. I put it in the path, which for me is

E:\E_2\dev\Isabelle2013-2\contrib\e-1.8\x86-cygwin

The INSTALL file then gives short instructions:

* Short Instructions

cd minisat
export MROOT=`pwd`
cd core
make Solver.o
cd ../simp
make SimpSolver.o
cd ../../picosat-936
./configure
make
cd ..
./configure
make
./test | grep ERROR

After downloading all needed packages, and putting eprover.exe in the path, it built without errors for me other than the test, but the executable works when used by Isabelle Sledgehammer.

STEP 3 of INSTALL talks about providing the location of the picomus executable, but I'm pretty sure that there's not need to do that because picosat-936\picomus.exe gets built in this build.

If you watch the build messages, it'll tell you what it's looking for and what it finds.

For completeness, I include the text from INSTALL, except for the instructions related to what's pertinent for Coq.

There are a number of requirements in order to compile Satallax.
In short, you need make, ocaml, g++ and the zlib header files.
In Debian and derived Linux systems, you can get these from
the build-essential and zlib1g-dev packages. You need
ocamlopt to obtain a standalone executable.

If you're not the administrator of the computer on which you're installing,
you can quote the previous paragraph to the administrator.

* Short Instructions

cd minisat
export MROOT=`pwd`
cd core
make Solver.o
cd ../simp
make SimpSolver.o
cd ../../picosat-936
./configure
make
cd ..
./configure
make
./test | grep ERROR

./bin/satallax.opt is the native code executable to use.
See test for examples of how to use it.

* Long Instructions

STEP 1:

Compile minisat (see minisat/README)

cd minisat
export MROOT=<minisat-dir>              (or setenv in cshell)
cd core
make Solver.o
cd ../simp
make SimpSolver.o
cd ../..

STEP 2 (Optional.  Only needed to extract proof information for proof terms.) :

Build picosat (including picomus):

cd picosat-936
./configure
make
cd ..

STEP 3:

If desired, edit the configure script to give the location of your picomus
and eprover executables. (If the executables are not found by the configure script,
you will need to give the location of the executables to satallax via the command line
options -P <picomus> -E <eprover> if they are needed.)
Run the configure script for Satallax.

./configure

STEP 4:

make

uses ocamlopt to make a standalone executable

./bin/satallax.opt

and uses ocamlc to make a bytecode executable

./bin/satallax

that depends on ocamlrun

STEP 5:

Test satallax using the examples in the script file:

./test

As long as you don't see a line with the word ERROR, it should be working.