|Message: setting G4LIB_USE_EXPAT||Not Logged In (login)|
Click on the Forum title, e.g. on the "Forums by Category" page, to read a sequence of postings to the Forum and its threads all in one page. If you are only interested in one thread or the thread following a specific posting, click the thread or the posting, which takes you to a smaller page, which contains only the part you are interested in and may be easier to navigate.
Messages are "chained" if there are only replies at the first level, i.e. 1/1.html, 1/1/1.html etc. In case of "chained" messages the message number is replaced by the icon and there is no indentation.
Inline: Display the subject line only or also the text of the posting(s); for the choice "All" the "Outline" choices are switched off.
|1||0||1||no text / full text of posting|
|2||1||All||text for level 1 only / text for All postings|
Outline: Choose the depth of the posting thread, successive toggle controls provide increasing detail.
|1||2||1||2 levels / 1 level (original posting)|
|2||3||2||3 levels / 2 levels|
|3||3||All||3 levels / all levels (all postings)|
I recently compiled Geant4.10.00 as per the online instructions. I used the CMake command:
cmake -DGEANT4_INSTALL_DATA=ON -DGEANT4_USE_SYSTEM_EXPAT=OFF -DCMAKE_INSTALL_PREFIX=/path/to/geant4.10.00-install /path/to/geant4.10.00
As you can see, I've selected for the EXPAT package to be compiled internally, because I don't want to use my system version.
After compilation of one of my standard simulations, I get the following:
/usr/bin/ld.real: cannot find -lexpat collect2: ld returned 1 exit status
Obvious: The linker is trying to find the EXPAT shared object file and can't. Since I knew this was supposed to be compiled with Geant4 I poked around in the libraries that it created and found libG4expat.so. Presumably this is the library, with 'G4' appended to let me know it was compiled with Geant, and also maybe so that my system doesn't get confused. Question then became, why are the internal Geant make files (which I deduced were responsible for creating the link line) using -lG4expat instead of -lexpat?
Looking into 'binmake.gmk' which is included into my user-defined top-level GNU make file (a simulation which I originally coded for v4.9.3), I found the following line:
ifdef G4LIB_USE_EXPAT LDLIBS2 += -lG4expat endif
Which shows me that if I set the G4LIB_USE_EXPAT variable, then I'll probably use the correct link statement, indeed this worked.
Question is, why was this variable not set by my automatic G4 setup script? Presumably it 'knew' that I choose for EXPAT to be compiled with Geant4. More concretely, why did I have to do:
source /path/to/geant4.10.00-install/bin/geant4.sh source /path/to/geant4.10.00-install/share/Geant4-10.0.0/geant4make/geant4make.sh export G4LIB_USE_EXPAT=1
instead of just:
source /path/to/geant4.10.00-install/bin/geant4.sh source /path/to/geant4.10.00-install/share/Geant4-10.0.0/geant4make/geant4make.sh
Incidentally, I'm not sure why I had to source both of the above scripts anyway. The first one only set the data paths, not G4INSTALL and similar. Actually I just checked and the second one sets the data paths as well, so I could just do:
But I still don't understand why I had to do:
Is there a cleaner way?