通过使用share library,beamnrc的模块可以被dosxyz直接引用,即可实现避免phase spacefile的剂量计算。这个功能需要事先在BEAM_XXX的目录下make library生成该加速器的share library,即egsnrc_mp/bin/xxxxx/libXXX.so文件,然后在dosxyznrc中引用9号源即可。
但是最近在一台64位cluster上尝试的时候,发现报错: 类似
usr/lib64/gcc/x86_64-suse-linux/4.6/../../../../x86_64-suse-linux/bin/ld: /home/whl/HEN_HOUSE/lib/x86_64-unknown-linux-gnu-gfortran/egs_c_utils.o: relocation R_X86_64_32 against `fl_write' can not be used when making a shared object; recompile with -fPIC
/home/whl/HEN_HOUSE/lib/x86_64-unknown-linux-gnu-gfortran/egs_c_utils.o: could not read symbols: Bad value
collect2: ld returned 1 exit status
make: *** [/home/whl/egsnrc_mp/bin/x86_64-unknown-linux-gnu-gfortran/libBEAM_EX16MVp.so] Error 1
意思是需要使用-fPIC选项重新编译egs_c_utils.o
这个问题是由于在64的机器上安装egs的时候没有对gfortran和gcc的编译器增加-fPIC选项,或者即使增加了这个选项,也没有使用这个选项编译egs_c_utils.c和load_beam.c造成的。
解决:
(1)在安装egs的时候,需要对gfortran和gcc的编译器增加-fPIC选项
(2)如果安装的时候忘记增加了,也可以在安装之后,通过修改HEN_HOUSE/specs/x86_64_xxxxx.conf中的gfortran 和gcc选项
(3)需要使用-fPIC 重新编译HEN_HOUSE/lib/x86_64xxxxxx目录下的egs_c_utils.c和beam_load.c即
gcc -c -shared -fPIC egs_c_utils.c
gcc -c -shared -fPIC load_beamlib.c
参考:
阅读(1152) | 评论(0) | 转发(0) |