我附加的makefile来自平滑粒子流体动力学代码的源目录。当我将粒子数固定为128 ** 3粒子时,我的代码可以正常编译。现在我需要使用256 ** 3,我得到一个relocation truncated to fit: R_X86_64_PC32 against symbol ... defined in COMMON section in ...
。
我尝试了一些在网上找到的东西:
-mcmodel=large
标志-fPIC
标志这些似乎都不起作用。我也知道https://www.technovelty.org/c/relocation-truncated-to-fit-wtf.html的文章,但我不知道该怎么做。
我的makefile :(我附加了一部分)
include ../makeflags
CPP=g++
CPPFLAGS = $(OPTIONS) -D$(SYS) -mcmodel=large -traceback
.SUFFIXES: .F
OBJ = hydra.o accel.o ahtime.o clist.o cool.o createcool.o dumpdata.o
.f.o:
$(F77) $(FLAGS) -c $<
.F.o:
@ if test $(SYS) = ibm ; then \
echo "$(CPP) -P -C $(CPPFLAGS) $< > tmp/$*.f";\
$(CPP) -P -C $(CPPFLAGS) $< > tmp/$*.f;\
echo "$(F77) $(FLAGS) -c tmp/$*.f";\
$(F77) $(FLAGS) -c tmp/$*.f;\
elif test $(SYS) = f2c ; then \
echo "$(CPP) -P -C $(CPPFLAGS) $< > tmp/$*.f";\
$(CPP) -P -C $(CPPFLAGS) $< > tmp/$*.f;\
echo "$(F77) $(FLAGS) -c tmp/$*.f";\
$(F77) $(FLAGS) -c tmp/$*.f;\
else \
echo "$(F77) $(FLAGS) $(CPPFLAGS) -c $<";\
$(F77) $(FLAGS) $(CPPFLAGS) -c $<;\
fi
.c.o:
$(CC) -c $(CPPFLAGS) $(CFLAGS) $<
hydra: tmp $(OBJ)
echo $(FLAGS)
$(F77) -o hydra $(FLAGS) $(OBJ) $(LIBS)
mv hydra $(RUNDIR)
new_options:
touch *.F
make
clean:
/bin/rm -rf *.o tmp
system.o: system.$(SYS)
@ if test $(SYS) = f2c ; then \
cp system.f2c system.c; \
$(CC) -c $(CPPFLAGS) $(CFLAGS) system.c; \
else \
cp system.$(SYS) system.f; \
$(F77) $(FLAGS) -c system.f; \
fi
tmp:
@ test -d $@ || mkdir $@
@ for i in `ls *.inc` ; do \
(cd tmp ; ln -s ../$$i $$i ) ; \
done
我的标志文件:(我附加了一部分)
SHELL = /bin/sh
# set SYS to one of: sun, dec, cray, sgi, ibm, hpux, f2c, g77
SYS = g77
# choose appropriate names for compilers
F77 = /usr/bin/f77
CC = cc
CPP = /lib/cpp
# compilation flags for linux box
FLAGS= -O2
FLAGS= -O2 -fomit-frame-pointer -m486
FLAGS= -Wall -g
FLAGS= -mcmodel=large
# For cosmic test use
UNITS_OPTIONS =
OTHER_OPTIONS =
OPTIONS = $(FORCE_OPTIONS) $(UNITS_OPTIONS) $(OTHER_OPTIONS)
我知道这是一些内存问题,由于某些原因,上述问题无法解决。请记住,我不能弄乱代码中的变量定义(例如,更改COMMON块等),因为它们已链接到许多程序,这将导致整体编译失败。我收到的确切错误是:
/home/user/Downloads/Stage/hydra4.0/src/hydra.F:1 :(。text + 0x14):重新定位以适合以下位置:R_X86_64_PC32针对hydra.o的COMMON部分中定义的符号“ param_”
对于许多组件程序,不仅对于hydra.o
。
答案 0 :(得分:0)
研究了3个月后,我通过添加-mcmodel = medium来解决了这个问题。