This is something I wanted to ask for a long time.
Binaries of my program, which consists of a libXX.so are built on the Bioconductor servers where currently
root_v5.22.00 is installed.
Users of my program can download from the servers the pre-built binaries for WinXP and MacOS X.
However the users need to install the correct root binary, currently root_v5.22.00. When they install an
older or a newer binary version from root the program will crash.
Can you tell me what is the exact reason why only the correct root version will work?
There can be several reasons:
-different compiler versions used to compile the different releases.
-changes in ROOT API across versions. In general we try to keep the API back compatible, but simply the fact to add a new function in a class will make two versions incompatible for the linker.
Thank you for your answers.
Since I try to make sure that my program works with different root versions, and the problem appears
mainly on Windows computers, it may indeed be a problem of different ABIs.
Hi Christian,[quote=“cstrato”]… the problem appears mainly on Windows computers… [/quote]As soon as the Windows is concern, you should be very careful.
You have to make sure that your application and ROOT libraries are compiled consistently (i.e. the same version of the ROOT/custom/system header files + the SAME compilation flags). In addition you have to make sure you link your application against of the correct versions of the system DLLs.
To manage the mess MS provides the special tool called “Manifest”.
See:
“http://msdn.microsoft.com/en-us/library/ms235542(VS.80).aspx”
[quote=“cstrato”]Thank you, this means definitely that the users of my program have always to download the root binary which was used to compile my program.[/quote]Make sure it contains the MS CRT too from your “redist” directory:
Thank you, but maybe I was not quite clear: my program is not an application but a shared library, and as long as
the users download the correct root version everything is fine, no need for a manifest or CRTs.