私は Linux の初心者で、32 ビット マシンで正常に動作するメイク ファイルのコンパイルに問題があります。私はこのプログラムを書きませんでしたが、その機能を使用するには動作する必要があります。私のマシンは 64 ビットですが、次のエラー メッセージが表示されます。
cd pmtTools; make
make[1]: Entering directory `/home/daniel/Documents/Master_thesis/data_Daniel-Thomas/photondet/trace/PMTSignalsAnalysis/pmtTools'
g++ -shared -L/home/root/root/lib -lCore -lCint -lRIO -lNet -lHist -lGraf -lGraf3d -lGpad -lTree -lRint -lPostscript -lMatrix -lPhysics -lMathCore -lThread -pthread -lm -ldl -rdynamic -o libPmtTools.so hit.o event.o waveform.o readLeCroyBinary.o pmtToolsDict.o
/usr/bin/ld: hit.o: relocation R_X86_64_32S against `vtable for hit' can not be used when making a shared object; recompile with -fPIC
hit.o: could not read symbols: Bad value
collect2: ld returned 1 exit status
make[1]: *** [libPmtTools.so] Error 1
make[1]: Leaving directory `/home/daniel/Documents/Master_thesis/data_Daniel-Thomas/photondet/trace/PMTSignalsAnalysis/pmtTools'
make: *** [all] Error 2
このWebサイトを使用して問題を解決しようとしていますが、プログラムが機能しません... http://www.gentoo.org/proj/en/base/amd64/howtos/index.xml? part=1&chap=3 私はメイクファイルに慣れていないので、共有ライブラリを PIC コンパイルするためにメイクファイルを適切に変更することができません。フラグ「export CXXFLAGS=$CXXFLAGS -fPIC」をグローバルに追加しましたが、機能しませんでした。私は完全に迷っています。
make ファイルは次のとおりです (2 つの make ファイルとそれらを呼び出す 1 つ)。
ROOTCONFIG = $(ROOTSYS)/bin/root-config
ROOTCINT = $(ROOTSYS)/bin/rootcint
DOXYGEN = doxygen
CXX = $(shell $(ROOTCONFIG) --cxx)
LD = $(shell $(ROOTCONFIG) --ld)
CFLAGS = $(shell $(ROOTCONFIG) --cflags)
LIBS = $(shell $(ROOTCONFIG) --libs)
SOFLAGS = -shared
CINTSRCS = event.cc hit.cc
CINTINCS = event.h hit.h
OBJS = hit.o event.o waveform.o readLeCroyBinary.o pmtToolsDict.o
LIBPMTTOOLS = libPmtTools.so
all: $(LIBPMTTOOLS)
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/Documents/Master_thesis/data_Daniel-Thomas/photondet/trace/PMTSignalsAnalysis/pmtTools
$(LIBPMTTOOLS): $(OBJS)
$(LD) $(SOFLAGS) $(LIBS) -o $@ $(OBJS)
%.o: %.cc
$(CXX) $(CFLAGS) -c -o $@ $<
pmtToolsDict.cc: $(CINTSRCS) $(CINTINCS) pmtToolsLinkDef.h
@echo "Generating dictionary pmtToolsDict..."
$(ROOTCINT) -f pmtToolsDict.cc -c -p $(CINTINCS) pmtToolsLinkDef.h
clean:
rm -f pmtToolsDict.cc pmtToolsDict.h $(LIBPMTTOOLS) $(OBJS)
dox:
rm -rf html
$(DOXYGEN) pmtTools.dox
----------------------------------------------2 -------- ------------
ROOTCONFIG = $(ROOTSYS)/bin/root-config
CXX = $(shell $(ROOTCONFIG) --cxx)
LD = $(shell $(ROOTCONFIG) --ld)
CFLAGS = $(shell $(ROOTCONFIG) --cflags) -I../pmtTools
LIBS = $(shell $(ROOTCONFIG) --libs)# -L../pmtTools -lpmtTools
OBJS = analysis.o
SHARED = ../pmtTools/libPmtTools.so
EXE = analysis.exe
all: $(EXE)
$(EXE): $(OBJS) $(SHARED)
$(LD) $(LIBS) -o $@ $(OBJS) $(SHARED)
$(SHARED):
cd ../pmtTools; make
%.o: %.cxx
$(CXX) $(CFLAGS) -c -o $@ $<
test: test.cxx $(SHARED)
$(CXX) $(CFLAGS) -c -o test.o test.cxx
$(LD) $(LIBS) -o test.exe test.o $(SHARED)
clean:
rm -f $(EXE) $(OBJS) test.o test.exe
----------------------3-------------------------
all:
cd pmtTools; make
cd analysis; make
clean:
cd pmtTools; make clean
cd analysis; make clean
誰かが私を助けてくれることを願っています。前もって感謝します!!ダニエル