Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2053781
  • 博文数量: 454
  • 博客积分: 10921
  • 博客等级: 上将
  • 技术积分: 5396
  • 用 户 组: 普通用户
  • 注册时间: 2006-06-15 15:20
个人简介

伪IT男

文章分类

全部博文(454)

文章存档

2016年(2)

2013年(6)

2012年(17)

2011年(29)

2010年(24)

2009年(54)

2008年(53)

2007年(202)

2006年(67)

分类: LINUX

2012-07-24 22:50:24

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