Derived classes undefined reference to MyClass


ROOT 6.15/01Built for linuxx8664gcc
heads/master@v6-13-04-218-g3ec307bbe3


I am trying to use derived classes to save the output from pythia
in one TTree. To run pythia, the following files described the main parts:

pythiaHeavyIon.cc pythiaHeavyIon.h pythiaHeavyIonLinkDef.h Makefile

// pythiaHeavyIon.cc:
#include "../../base/HxPythiaHIEvent.cxx"
#include "../../base/HxSimParticle.cxx"

TTree *Tree1 = new TTree("Tree1","Tree1");
HxPythiaHIEvent *event1 = new HxPythiaHIEvent();
HxSimParticle *part1 = new HxSimParticle();
Tree1->Branch("event1", &event1);

// pythiaHeavyIon.h:
#include "Pythia8/Pythia.h"
using namespace Pythia8;

// pythiaHeavyIonLinkDef.h:
#pragma link C++ class HxPythiaHIEvent+;
#pragma link C++ class HxSimParticle+;

// Makefile:
HXPATH =../../base

# Target: Heavy Ion     
pythiaHeavyIon: $$@.cc $(PREFIX_LIB)/libpythia8.a pythiaHeavyIon.so
ifeq ($(ROOT_USE),true)
        $(CXX) $< pythiaHeavyIon.so -o $@ -w -I$(ROOT_INCLUDE) $(CXX_COMMON)\
         `$(ROOTBIN)root-config --cflags` -Wl,-rpath,./\
         -Wl,-rpath,$(ROOT_LIB) `$(ROOT_BIN)root-config --libs --glibs --evelibs`
else
        @echo "Error: $@ requires ROOT"
endif
pythiaHeavyIon.so: pythiaHeavyIonDct.cc $(PREFIX_LIB)/libpythia8.a
        $(CXX) $< -o $@ -w -I$(ROOT_INCLUDE) $(CXX_SHARED) $(CXX_COMMON)\
         `$(ROOTBIN)root-config --cflags`
pythiaHeavyIonDct.cc: pythiaHeavyIon.h $(HXPATH)/HxSimParticle.h $(HXPATH)/HxPythiaHIEvent.h pythiaHeavyIonLinkDef.h
        export LD_LIBRARY_PATH=$$LD_LIBRARY_PATH:$(ROOT_LIB);\
         $(ROOT_BIN)rootcint -f $@ -c -I$(PREFIX_INCLUDE) $^

Error:

$ make pythiaHeavyIon
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/andsilva/build/lib;\
 /home/andsilva/build/bin/rootcint -f pythiaHeavyIonDct.cc -c -I/home/andsilva/pythia8235/include pythiaHeavyIon.h ../../base/HxSimParticle.h ../../base/HxPythiaHIEvent.h pythiaHeavyIonLinkDef.h
g++ pythiaHeavyIonDct.cc -o pythiaHeavyIon.so -w -I/home/andsilva/build/include -shared -I/home/andsilva/pythia8235/include -O2  -pedantic -W -Wall -Wshadow -fPIC -L/home/andsilva/pythia8235/lib -Wl,-rpath,/home/andsilva/pythia8235/lib -lpythia8 -ldl \
 `root-config --cflags`
g++ pythiaHeavyIon.cc pythiaHeavyIon.so -o pythiaHeavyIon -w -I/home/andsilva/build/include -I/home/andsilva/pythia8235/include -O2  -pedantic -W -Wall -Wshadow -fPIC -L/home/andsilva/pythia8235/lib -Wl,-rpath,/home/andsilva/pythia8235/lib -lpythia8 -ldl \
 `root-config --cflags` -Wl,-rpath,./\
 -Wl,-rpath,/home/andsilva/build/lib `/home/andsilva/build/bin/root-config --libs --glibs --evelibs`
/tmp/cceTsgOI.o: In function `HxPythiaHIEvent::HxPythiaHIEvent()':
pythiaHeavyIon.cc:(.text+0x555): undefined reference to `HxSimEvent::HxSimEvent()'
/tmp/cceTsgOI.o: In function `HxPythiaHIEvent::HxPythiaHIEvent(TClonesArray*)':
pythiaHeavyIon.cc:(.text+0x585): undefined reference to `HxSimEvent::HxSimEvent(TClonesArray*)'
/tmp/cceTsgOI.o: In function `HxPythiaHIEvent::~HxPythiaHIEvent()':
pythiaHeavyIon.cc:(.text+0x8c): undefined reference to `HxSimEvent::~HxSimEvent()'
/tmp/cceTsgOI.o: In function `main':
pythiaHeavyIon.cc:(.text.startup+0x3ab): undefined reference to `HxSimEvent::AddParticle(HxSimParticle*)'
/tmp/cceTsgOI.o:(.data.rel.ro._ZTI15HxPythiaHIEvent[_ZTI15HxPythiaHIEvent]+0x10): undefined reference to `typeinfo for HxSimEvent'
collect2: error: ld returned 1 exit status
Makefile:51: recipe for target 'pythiaHeavyIon' failed
make: *** [pythiaHeavyIon] Error 1

HxPythiaHIEvent.cxx:

#include "HxPythiaHIEvent.h"

ClassImp(HxPythiaHIEvent)

//______________________________________________________________________________
/// Default constructor
HxPythiaHIEvent::HxPythiaHIEvent():
HxSimEvent(),
fb(-1),
fNpart(-1)
{
    // Nothing needed, default constructor
}

/// Constructor
/// \param particles Array with HxSimParticle objects
HxPythiaHIEvent::HxPythiaHIEvent(TClonesArray *particles):
HxSimEvent(particles), //pass to default constructor, please
fb(-1),
fNpart(-1)
{
    /* empty */
}
...
...

HxPythiaHIEvent.h:

class HxPythiaHIEvent : public HxSimEvent {

protected:
    Double_t fb;   //impact parameter
    Int_t fNpart;  //number of participants

public:
    HxPythiaHIEvent();
    HxPythiaHIEvent(TClonesArray *particles);
    virtual ~HxPythiaHIEvent();

    //custom, reimplement
    virtual void Clear(const Option_t* ="");
    virtual void PrintInfo();

    //Specific HI information if requested
    Double_t GetImpactParameter() const;
    void SetImpactParameter(Double_t lb);

    Int_t GetNpart() const;
    void SetNpart(Int_t lNpart);

    ClassDef(HxPythiaHIEvent,1)  // 0 - first implementation

};

inline Double_t HxPythiaHIEvent::GetImpactParameter() const  { return (Double_t)fb;  }
inline Int_t HxPythiaHIEvent::GetNpart()              const  { return (Int_t)fNpart; }
#endif

HxSimEvent.cxx:

#include "HxSimEvent.h"

ClassImp(HxSimEvent)

/// Default constructor
HxSimEvent::HxSimEvent() :
fnFinalParticles(0),
fnFinalCharged(0),
fParticles(0x0)
{
    // create new empty array
    fParticles = new TClonesArray("HxSimParticle");
}
/// Constructor
/// \param particles Array with HxSimParticle objects
HxSimEvent::HxSimEvent(TClonesArray *particles) :
fnFinalParticles(0),
fnFinalCharged(0),
fParticles(particles)
{
    /* empty */
}

Someone how to fix this?

Cheers, Andre

HI Andre, I don’t see in your Makefile where HxSimEvent.cxx and HxPythiaHIEvent.cxx are added to the library, so the missing symbols are probably due to that. If you add them in the line where you compile your library, then the symbols will probably be resolved. Either that, or you have to compile the two files above into a separate library, then link the library where you have missing symbols to it.

Hi amadio,

Thanks for the reply, in the Makefile I add the line to HxSimEvent.cxx
and HxPythiaHIEvent.cxx

HXPATH = ../../base

all: libs

libs: libHxSimParticle.so libHxSimEvent.so libHxPythiaHIEvent.so

PYTHIA8   = /home/andsilva/pythia8235

# define compiler/linker flags
CXX       = g++

CXXFLAGS  = -O3 -Wall -fPIC
CXXFLAGS += -I$(shell $(PYTHIA8)/bin/pythia8-config --includedir)
CXXFLAGS += $(shell root-config --cflags)
CXXFLAGS += -I$(PWD)

#LDFLAGS   = -O3 -Wl,-install_name,@rpath/$@
LDFLAGS   = -O3
LDFLAGS  += $(shell root-config --ldflags)
LDFLAGS  +=  -Wl,-rpath,$(HXPATH)/
#LDFLAGS  += -L$(PWD)

SOFLAGS   = -shared
#SOFLAGS   = -dynamiclib

ROOTLIBS  = $(shell root-config --libs --glibs --evelibs)
ROOTLIBS += -lEG -lGui -lASImage -lASImageGui

P8LIBS    = -Wl,-rpath,$(PYTHIA8)/lib
#P8LIBS    = -Wl,-install_name,$(PYTHIA8)/lib/libpythia8.dylib
P8LIBS   += $(shell $(PYTHIA8)/bin/pythia8-config --libs)

HXLIBS    = -L$(HXPATH)/ -lHxSimParticle -lHxSimEvent -lHxPythiaHIEvent


# compile/link HxPythiaHIEvent
libHxPythiaHIEvent.so: HxPythiaHIEventDict.o HxPythiaHIEvent.o HxSimEventDict.o HxSimEvent.o HxSimParticleDict.o HxSimParticle.o
        $(CXX) $(SOFLAGS) $(LDFLAGS) $^ $(ROOTLIBS) $(HXLIBS) -o $@ 

HxPythiaHIEvent.o: $(HXPATH)/HxPythiaHIEvent.cxx
        $(CXX) $(CXXFLAGS) -c $^ -o $@ 

HxPythiaHIEventDict.o: HxPythiaHIEventDict.cxx
        $(CXX) $(CXXFLAGS) -c $^ -o $@ 

HxPythiaHIEventDict.cxx: $(HXPATH)/HxPythiaHIEvent.h $(HXPATH)/HxPythiaHIEventLinkDef.h
        rootcling -f $@ -c $(CXXFLAGS) -p $^

# compile/link HxSimEvent
libHxSimEvent.so: HxSimEventDict.o HxSimEvent.o HxSimParticleDict.o HxSimParticle.o
        $(CXX) $(SOFLAGS) $(LDFLAGS) $^ $(ROOTLIBS) $(HXLIBS) -o $@ 

HxSimEvent.o: $(HXPATH)/HxSimEvent.cxx
        $(CXX) $(CXXFLAGS) -c $^ -o $@ 

HxSimEventDict.o: HxSimEventDict.cxx
        $(CXX) $(CXXFLAGS) -c $^ -o $@ 

HxSimEventDict.cxx: $(HXPATH)/HxSimEvent.h $(HXPATH)/HxSimEventLinkDef.h
        rootcling -f $@ -c $(CXXFLAGS) -p $^

# compile/link HxSimParticle
libHxSimParticle.so: HxSimParticleDict.o HxSimParticle.o
        $(CXX) $(SOFLAGS) $(LDFLAGS) $^ $(ROOTLIBS) $(HXLIBS) -o $@ 

HxSimParticle.o: $(HXPATH)/HxSimParticle.cxx
        $(CXX) $(CXXFLAGS) -c $^ -o $@ 

HxSimParticleDict.o: HxSimParticleDict.cxx
        $(CXX) $(CXXFLAGS) -c $^ -o $@ 

HxSimParticleDict.cxx: $(HXPATH)/HxSimParticle.h $(HXPATH)/HxSimParticleLinkDef.h
        rootcling -f $@ -c $(CXXFLAGS) -p $^

same error,

To create a shared library, you need all symbols to be resolved, which means that all code the library calls needs to be either linked (with e.g. -lHxSimParticle), or added as an object file. I recommend you to create a single library out of all of your files together, that way all symbols will be there. If you create several libraries, they will all need to link to each other, and you may have a circular dependency.

How to create a single library? Can you explain it to me how to do?

Cheers, andre

Just keep this rule and all rules for .o files, and remove other .so rules. If you get missing symbols, add the .o file that implements the missing symbols in the .o list for the rule above.

I did what you said, but the same error,

HxSimEvent.o: $(HXPATH)/HxSimEvent.cxx
        $(CXX) $(CXXFLAGS) -c $^ -o $@

HxSimEventDict.o: HxSimEventDict.cxx
        $(CXX) $(CXXFLAGS) -c $^ -o $@ 

HxSimParticle.o: $(HXPATH)/HxSimParticle.cxx
        $(CXX) $(CXXFLAGS) -c $^ -o $@ 

HxSimParticleDict.o: HxSimParticleDict.cxx
        $(CXX) $(CXXFLAGS) -c $^ -o $@

# compile/link HxSimEvent
libHxSimEvent.so: HxSimEventDict.o HxSimEvent.o HxSimParticleDict.o HxSimParticle.o
        $(CXX) $(SOFLAGS) $(LDFLAGS) $^ $(ROOTLIBS) $(HXLIBS) -o $@ 

Please post the actual error, it’s not possible to tell if it’s the same error without seeing which symbols are missing.

sorry,

make pythiaHeavyIon
g++ pythiaHeavyIon.cc pythiaHeavyIon.so -o pythiaHeavyIon -w -I/home/andsilva/build/include -I/home/andsilva/pythia8235/include -O2  -pedantic -W -Wall -Wshadow -fPIC -L/home/andsilva/pythia8235/lib -Wl,-rpath,/home/andsilva/pythia8235/lib -lpythia8 -ldl \
 `root-config --cflags` -Wl,-rpath,./\
 -Wl,-rpath,/home/andsilva/build/lib `/home/andsilva/build/bin/root-config --libs --glibs --evelibs`
/tmp/ccpwiRKa.o: In function `HxPythiaHIEvent::HxPythiaHIEvent()':
pythiaHeavyIon.cc:(.text+0x555): undefined reference to `HxSimEvent::HxSimEvent()'
/tmp/ccpwiRKa.o: In function `HxPythiaHIEvent::HxPythiaHIEvent(TClonesArray*)':
pythiaHeavyIon.cc:(.text+0x585): undefined reference to `HxSimEvent::HxSimEvent(TClonesArray*)'
/tmp/ccpwiRKa.o: In function `HxPythiaHIEvent::~HxPythiaHIEvent()':
pythiaHeavyIon.cc:(.text+0x8c): undefined reference to `HxSimEvent::~HxSimEvent()'
/tmp/ccpwiRKa.o: In function `main':
pythiaHeavyIon.cc:(.text.startup+0x3ab): undefined reference to `HxSimEvent::AddParticle(HxSimParticle*)'
/tmp/ccpwiRKa.o:(.data.rel.ro._ZTI15HxPythiaHIEvent[_ZTI15HxPythiaHIEvent]+0x10): undefined reference to `typeinfo for HxSimEvent'
collect2: error: ld returned 1 exit status
Makefile:83: recipe for target 'pythiaHeavyIon' failed
make: *** [pythiaHeavyIon] Error 1

Makefile:

 80 # Target: Heavy Ion     
 81 pythiaHeavyIon: $$@.cc $(PREFIX_LIB)/libpythia8.a pythiaHeavyIon.so
 82 ifeq ($(ROOT_USE),true)
 83         $(CXX) $< pythiaHeavyIon.so -o $@ -w -I$(ROOT_INCLUDE) $(CXX_COMMON)\
 84          `$(ROOTBIN)root-config --cflags` -Wl,-rpath,./\
 85          -Wl,-rpath,$(ROOT_LIB) `$(ROOT_BIN)root-config --libs --glibs --evelibs`
 86 else
 87         @echo "Error: $@ requires ROOT"
 88 endif
 89 pythiaHeavyIon.so: pythiaHeavyIonDct.cc $(PREFIX_LIB)/libpythia8.a
 90         $(CXX) $< -o $@ -w -I$(ROOT_INCLUDE) $(CXX_SHARED) $(CXX_COMMON)\
 91          `$(ROOTBIN)root-config --cflags`
 92 pythiaHeavyIonDct.cc: pythiaHeavyIon.h $(HXPATH)/HxSimParticle.h $(HXPATH)/HxPythiaHIEvent.h pythiaHeavyIonLinkDef.h
 93         export LD_LIBRARY_PATH=$$LD_LIBRARY_PATH:$(ROOT_LIB);\
 94          $(ROOT_BIN)rootcint -f $@ -c -I$(PREFIX_INCLUDE) $^

The command line creating your executable is wrong, you should not pass .so files on the command line like this, and the order in which you pass them matters. If all you care about is to create an executable at the end with everything, I’d skip creating a library altogether and would just make the final executable out of all the object files or even compile everything in one go out of all the source files, like this:

$ g++ [options] -o pythiaHeavyIon [cxxflags] [.cxx files] [library flags]

Thanks for the help, @amadio. I did your suggestion and I get the error:

Segmentation fault (core dumped)

Makefile:

all: libs programs

libs: libHxSimParticle.so libHxSimEvent.so libHxPythiaHIEvent.so

programs: pythia pythiaHeavyIon

HXPATH = ../../base

PYTHIA8 = /home/andsilva/pythia8235

# define compiler/linker flags
CXX       = g++

CXXFLAGS  = -O3 -Wall -fPIC
CXXFLAGS += -I$(shell $(PYTHIA8)/bin/pythia8-config --includedir)
CXXFLAGS += $(shell root-config --cflags)
CXXFLAGS += -I$(PWD)

LDFLAGS  += -Wl,-rpath,$(PWD)
LDFLAGS  += $(shell root-config --ldflags)
LDFLAGS  += -L$(PWD)

SOFLAGS   = -shared
#SOFLAGS   = -dynamiclib

ROOTLIBS  = $(shell root-config --libs --glibs --evelibs)
ROOTLIBS += -lEG -lGui -lASImage -lASImageGui

P8LIBS    = -Wl,-rpath,$(PYTHIA8)/lib
P8LIBS   += $(shell $(PYTHIA8)/bin/pythia8-config --libs)

HXLIBS    = -L$(HXPATH)/ -lHxSimParticle -lHxSimEvent -lHxPythiaHIEvent

# compile/link HxPythiaHIEvent
libHxPythiaHIEvent.so: HxPythiaHIEventDict.o HxPythiaHIEvent.o HxSimEventDict.o HxSimEvent.o HxSimParticleDict.o HxSimParticle.o
        $(CXX) $(SOFLAGS) $(LDFLAGS) $^ $(ROOTLIBS) -o $@ 

HxPythiaHIEvent.o: $(HXPATH)/HxPythiaHIEvent.cxx
        $(CXX) $(CXXFLAGS) -c $^ -o $@

HxPythiaHIEventDict.cxx: $(HXPATH)/HxPythiaHIEvent.h $(HXPATH)/HxPythiaHIEventLinkDef.h
        rootcling -f $@ -c $(CXXFLAGS) -p $^

HxPythiaHIEventDict.o: HxPythiaHIEventDict.cxx
        $(CXX) $(CXXFLAGS) -c $^ -o $@

# compile/link HxSimEvent
libHxSimEvent.so: HxSimEventDict.o HxSimEvent.o HxSimParticleDict.o HxSimParticle.o
        $(CXX) $(SOFLAGS) $(LDFLAGS) $^ $(ROOTLIBS) -o $@ 

HxSimEvent.o: $(HXPATH)/HxSimEvent.cxx
        $(CXX) $(CXXFLAGS) -c $^ -o $@ 

HxSimEventDict.cxx: $(HXPATH)/HxSimEvent.h $(HXPATH)/HxSimEventLinkDef.h
        rootcling -f $@ -c $(CXXFLAGS) -p $^

HxSimEventDict.o: HxSimEventDict.cxx
        $(CXX) $(CXXFLAGS) -c $^ -o $@

# compile/link HxSimParticle
libHxSimParticle.so: HxSimParticleDict.o HxSimParticle.o
        $(CXX) $(SOFLAGS) $(LDFLAGS) $^ $(ROOTLIBS) -o $@

HxSimParticle.o: $(HXPATH)/HxSimParticle.cxx
        $(CXX) $(CXXFLAGS) -c $^ -o $@ 

HxSimParticleDict.cxx: $(HXPATH)/HxSimParticle.h $(HXPATH)/HxSimParticleLinkDef.h
        rootcling -f $@ -c $(CXXFLAGS) -p $^

HxSimParticleDict.o: HxSimParticleDict.cxx
        $(CXX) $(CXXFLAGS) -c $^ -o $@ 

# pythia
pythia: libHxSimEvent.so pythia.cc
        $(CXX) $(CXXFLAGS) $(SOFLAGS) $(LDFLAGS) $^ $(ROOTLIBS) $(P8LIBS) $(HXLIBS) -o $@

# pythiaHeavyIon
pythiaHeavyIon: libHxPythiaHIEvent.so pythiaHeavyIon.cc
        $(CXX) $(CXXFLAGS) $(SOFLAGS) $(LDFLAGS) $^ $(ROOTLIBS) $(P8LIBS) $(HXLIBS) -o $@

.PHONY: clean distclean

# remove object files
clean:
        @rm -f *.o

# remove objects, libraries and dicts
distclean: clean
        @rm -f *.so *Dict.*
~                                
$ make pythia
g++ -O3 -Wall -fPIC -I/home/andsilva/pythia8235/include -pthread -std=c++11 -m64 -I/home/andsilva/build/include -I/home/andsilva/myHadrex/hadrex-formats/dev/andsilva -c HxSimEventDict.cxx -o HxSimEventDict.o
g++ -O3 -Wall -fPIC -I/home/andsilva/pythia8235/include -pthread -std=c++11 -m64 -I/home/andsilva/build/include -I/home/andsilva/myHadrex/hadrex-formats/dev/andsilva -c ../../base/HxSimEvent.cxx -o HxSimEvent.o 
g++ -O3 -Wall -fPIC -I/home/andsilva/pythia8235/include -pthread -std=c++11 -m64 -I/home/andsilva/build/include -I/home/andsilva/myHadrex/hadrex-formats/dev/andsilva -c HxSimParticleDict.cxx -o HxSimParticleDict.o 
g++ -O3 -Wall -fPIC -I/home/andsilva/pythia8235/include -pthread -std=c++11 -m64 -I/home/andsilva/build/include -I/home/andsilva/myHadrex/hadrex-formats/dev/andsilva -c ../../base/HxSimParticle.cxx -o HxSimParticle.o 
g++ -shared -Wl,-rpath,/home/andsilva/myHadrex/hadrex-formats/dev/andsilva -m64 -L/home/andsilva/myHadrex/hadrex-formats/dev/andsilva HxSimEventDict.o HxSimEvent.o HxSimParticleDict.o HxSimParticle.o -L/home/andsilva/build/lib -lCore -lImt -lRIO -lNet -lHist -lGraf -lGraf3d -lGpad -lROOTDataFrame -lROOTVecOps -lTree -lTreePlayer -lRint -lPostscript -lMatrix -lPhysics -lMathCore -lThread -lMultiProc -pthread -lm -ldl -rdynamic -L/home/andsilva/build/lib -lGui -L/home/andsilva/build/lib -lEve -lEG -lGeom -lGed -lRGL -lEG -lGui -lASImage -lASImageGui -o libHxSimEvent.so 
g++ -O3 -Wall -fPIC -I/home/andsilva/pythia8235/include -pthread -std=c++11 -m64 -I/home/andsilva/build/include -I/home/andsilva/myHadrex/hadrex-formats/dev/andsilva -shared -Wl,-rpath,/home/andsilva/myHadrex/hadrex-formats/dev/andsilva -m64 -L/home/andsilva/myHadrex/hadrex-formats/dev/andsilva libHxSimEvent.so pythia.cc -L/home/andsilva/build/lib -lCore -lImt -lRIO -lNet -lHist -lGraf -lGraf3d -lGpad -lROOTDataFrame -lROOTVecOps -lTree -lTreePlayer -lRint -lPostscript -lMatrix -lPhysics -lMathCore -lThread -lMultiProc -pthread -lm -ldl -rdynamic -L/home/andsilva/build/lib -lGui -L/home/andsilva/build/lib -lEve -lEG -lGeom -lGed -lRGL -lEG -lGui -lASImage -lASImageGui -Wl,-rpath,/home/andsilva/pythia8235/lib -L/home/andsilva/pythia8235/lib -lpythia8 -ldl -L../../base/ -lHxSimParticle -lHxSimEvent -lHxPythiaHIEvent -o pythia

…/…/base

HxHydroEvent.cxx                          HxPythiaHIEventLinkDef.h                HxSimParticle_cxx.so
HxHydroEventDict.cxx                      HxPythiaHIEvent.o                       HxSimParticleDict.cxx
HxHydroEventDict.o                        HxSimEvent.cxx                          HxSimParticleDict.o
HxHydroEventDict_rdict.pcm                HxSimEvent_cxx_ACLiC_dict_rdict.pcm     HxSimParticleDict_rdict.pcm
HxHydroEvent.h                            HxSimEvent_cxx.d                        HxSimParticle.h
HxHydroEventLinkDef.h                     HxSimEvent_cxx.so                       HxSimParticleLinkDef.h
HxHydroEvent.o                            HxSimEventDict.cxx                      HxSimParticle.o
HxPythiaHIEvent.cxx                       HxSimEventDict.o                        libHxHydroEvent.so
HxPythiaHIEvent_cxx_ACLiC_dict_rdict.pcm  HxSimEventDict_rdict.pcm                libHxPythiaHIEvent.so
HxPythiaHIEvent_cxx.d                     HxSimEvent.h                            libHxSimEvent.so
HxPythiaHIEvent_cxx.so                    HxSimEventLinkDef.h                     libHxSimParticle.so
HxPythiaHIEventDict.cxx                   HxSimEvent.o                            Makefile
HxPythiaHIEventDict.o                     HxSimParticle.cxx                       Makefile_OSX
HxPythiaHIEventDict_rdict.pcm             HxSimParticle_cxx_ACLiC_dict_rdict.pcm  README.md
HxPythiaHIEvent.h                         HxSimParticle_cxx.d

/andsilva

 ls
Analysis                       HxSimEventDict.o             libHxPythiaHIEvent.so  pythiaHeavyIon.cc
HeavyIonAA.cmnd                HxSimEventDict_rdict.pcm     libHxSimEvent.so       README.md
HeavyIonpA.cmnd                HxSimEvent.o                 Makefile               WithMPI_MoreQCDBased.cmnd
HeavyIonpp.cmnd                HxSimParticleDict.cxx        NoMPI_NoCR.cmnd        WithMPI_MPIBased.cmnd
HxPythiaHIEventDict.cxx        HxSimParticleDict.o          pythia                 WithMPI_NoCR.cmnd
HxPythiaHIEventDict_rdict.pcm  HxSimParticleDict_rdict.pcm  pythia.cc              WithMPI_Ropes.cmnd
HxSimEventDict.cxx             HxSimParticle.o              pythiaHeavyIon         WithMPI_RopesShoving.cmnd

Maybe the error can be in some point in the pythia.cc
pythia.cc:

#include "Pythia8/Pythia.h"
#include "Pythia8Plugins/ColourReconnectionHooks.h"

// For save Pythia events as TTree in a file
// using Hadrex class
#include "TTree.h"
#include "TFile.h"

#include "TMath.h"
#include "sstream"
#include "iostream"

//load Hadrex Class
#include "../../base/HxSimParticle.cxx"
#include "../../base/HxSimEvent.cxx"

using namespace Pythia8;

int main(int argc, char* argv[]) {

    // Generator.
    Pythia pythia;

    // Input File
    pythia.readFile(argv[1]);

    // Input Energy
    long rEnergy;
    rEnergy = atoi(argv[2]);

    //Energy in GeV
    pythia.readString(Form("Beams:eCM = %li", rEnergy));

.exe pythia: with Input file and energy,

/andsilva$ ./pythia WithMPI_MoreQCDBased.cmnd 7000
Segmentation fault (core dumped)

I think you have a different kind of problem now. I recommend running the compiled code with a debugger like gdb or lldb and tracing where the segmentation fault happens. It’s usually an access to invalid memory or a nullptr dereference somewhere.

Thanks for the help, @amadio

I find the error, Don’t need this flag: $(SOFLAGS)

# pythia
pythia: libHxSimEvent.so libHxSimParticle.so pythia.cc
        $(CXX) $(CXXFLAGS) $(LDFLAGS) -O3 $^ -o $@ $(ROOTLIBS) $(P8LIBS) $(HXLIBS)

Cheers, Andre

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.