[ImageJ-devel] SCIFIO via Avian, was Re: [VIGRA] Avian VM and Bio-Formats

Ullrich Koethe ullrich.koethe at iwr.uni-heidelberg.de
Fri Nov 29 16:31:21 CST 2013

Hi Johannes,

>>> I am an idiot! Avian uses the "make" command. That will compile things
>>> into a subdirectory of build/. It actually requires JAVA_HOME to point
>>> to a JDK and javac to be in the PATH. Sorry for not describing this
>>> correctly.
>> OK, I tried make, but the makefile doesn't support Visual Studio (only on
>> Windows Phone, not on Windows 7). So I guess I'll have to start over on a
>> Linux box, because a mingw build will most certainly be incompatible with the
>> maven-compiled stuff, which used Visual Studio.
> Again, I did not have problems with ming64 with nar-maven-plugin. But
> maybe you are referring to Avian?

Indeed, I was referring to the make-based compilation of Avian, not to 

> And why are you trying to get things to work on the platform that is
> notorious for being the most difficult to develop platform-independently
> for?

Last week, we simply tried Tobias' code on my Windows box, and (thanks 
to maven) it worked more or less out of the box, except for the extra 
paths we had to add to pom.xml (see my earlier mail) and an 
incompatibility in some macro magic that turned out to be easy to fix. 
Encouraged by this success, I simply tried your code as well.

I don't mind switching to Linux for the time being, it just means that I 
have to install all prerequisites again, which will take some time.

> As I said, Windows is notorious for being hard to compile
> platform-independent code on. It is not only the insistence on a
> non-standard C++ ABI (you cannot mix and match Visual C++-compiled code
> with GNU C++-compiled code because GNU C++ *adheres* to the standard while
> Visual C++ does not).

GNU's standard adherence notwithstanding, different versions of gcc 
still produce mutually incompatible shared libraries, see our other 
conversation on the VIGRA mailing list. So Linux and Mac are not really 
much better in this respect. In the end, it is the complexity of C++ 
that bites everyone.

> It is also the chronical problems with a lack of
> standardized installation paths for headers and libraries,

Indeed. I opted for a Unix-like path structure according to 
c:\install\bin, c:\install\include etc., which makes life a lot easier.

> the lack of
> speed with its filesystem drivers (and as a consequence insane runtimes of
> compilation and Git operations compared to every other operating system).

VIGRA compilation takes about the same time on Windows and Linux, and I 
haven't experienced any latency in git either. In contrast, maven did 
indeed seem to be a bit on the slow side.

> And of course it is the complete and utter lack of POSIX routines,
> something industry outside Microsoft's area of influence settled on a long
> time ago.

I guess, the boost libraries have solved this problem for most purposes, 
and better than POSIX for that matter.

> Yes, there is another thing I completely forgot to mention: in
> vigra-imglib2, I ran "mvn dependency:copy-dependencies" a long time ago
> (back when I mentioned to Tobias that I was working on this),
> so long ago that I forgot in the meantime. Very sorry for this!

OK. I executed "mvn dependency:copy-dependencies", followed by "mvn 
install", and am back to

[ERROR] Error: Class net.imglib2.Interval could not be found.

But since Avian won't work easily on this machine anyway, it's probably 
not worth fixing now.

Best regards

More information about the ImageJ-devel mailing list