Tcl 错误:尝试配置时使用-fPIC重新编译。/configure&&;打瞌睡

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

我正在尝试为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.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,它也无法构建,因此我将把它保留在那里:)