Chinaunix首页 | 论坛 | 博客
  • 博客访问: 71752
  • 博文数量: 35
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 12
  • 用 户 组: 普通用户
  • 注册时间: 2015-03-26 20:17
文章分类
文章存档

2015年(35)

我的朋友

分类: LINUX

2015-03-26 20:21:05

通过使用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
 
 
参考:
阅读(1102) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~