Tcl 错误:尝试配置时使用-fPIC重新编译。/configure&&;打瞌睡
我正在尝试为tcl配置并制作安装包nap6.4,但在“制作”过程中失败,错误如下:Tcl 错误:尝试配置时使用-fPIC重新编译。/configure&&;打瞌睡,tcl,shared-libraries,shared-objects,fpic,cflags,Tcl,Shared Libraries,Shared Objects,Fpic,Cflags,我正在尝试为tcl配置并制作安装包nap6.4,但在“制作”过程中失败,错误如下: cc -shared -o libnap6.4.so cart_proj.o eval_tree.o function.o geometry.o land_flag.o land_flag_i.o linsys.o nap.o napChoice.o napDyad.o napDyadLib.o napImgNAO.o napInit.o napLib.o napMonad.o napParse.ta
cc -shared -o libnap6.4.so cart_proj.o eval_tree.o function.o geometry.o land_flag.o land_flag_i.o linsys.o nap.o napChoice.o napDyad.o napDyadLib.o napImgNAO.o napInit.o napLib.o napMonad.o napParse.tab.o napParseLib.o napPolygon.o napSpatial.o nap_get.o nap_hdf.o nap_netcdf.o nap_ooc.o triangulate.o -L/usr/local/lib -lnetcdf -L/usr/local/lib -lmfhdf -ldf -ljpeg -lz -L/usr/local/lib -lproj -L. -ltclstub8.4 -ltkstub8.4 -lieee -lm -lX11
/usr/bin/ld: /usr/local/lib/libmfhdf.a(mfsd.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with - fPIC
/usr/local/lib/libmfhdf.a: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
make: *** [libnap6.4.so] Error 1
因此,我被告知使用-fPIC重新编译,我从终端以以下方式进行了编译:
export CFLAGS=-fPIC
./configure --prefix/lib/ActiveTcl --enable-shared
make
但这是行不通的。我还尝试了禁用共享、清除和
export CFLAGS="-fPIC -DHAVE_NETCDF"/ export CFLAGS="-fPIC" etc..
以及其他不工作的CFLAGS版本
所以我想知道如何使用-fPIC重新编译?这里缺少一些特殊语法吗?您需要共享MDF库(libmfhdf)。此常见问题解答似乎是相关的:或者,您可以尝试使用
--禁用共享配置nap6.4,而无需尝试使用-fPIC
<代码>-fPIC
仅对共享生成是必需的。@rici在配置容器中的nap之前,在hdf4包中添加--disable fortran并添加export CFLAGS=“-fPIC”)。但是,如果我尝试将其添加到Dockerfile中,容器将无法生成。下面是代码:运行cd/usr/local/nap/unix\n运行export CFLAGS=“-fPIC”\n运行/configure--prefix=/lib/ActiveTcl8.6--enable shared&&make&&make install。由于“/configure,command not found”,此操作失败。克里斯汀:您不能运行cd/some/directory
,然后运行
其他操作,因为每个运行
命令都是独立的,在子shell中执行。如果要cd
然后在目录中执行某些命令,则需要将它们放在相同的RUN
命令中:RUN cd/usr/local/nap/unix&./configure…
。如果您指定--启用共享,我不知道导出CFLAGS
是必要的,但我认为这不会造成伤害;不管怎么说,我相信Docker有一个ENV
命令,它可能更接近于做你想做的事情。@rici谢谢,它现在可以工作了,把所有的事情放在同一条线上。我必须在之前添加“makeclean”。/configure(出于某种原因)才能成功构建容器。如果没有CFLAGS,它也无法构建,因此我将把它保留在那里:)