首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >编译fortran文件时出现"/usr/bin/ld: errno: TLS定义in /lib/libc.so.6“

编译fortran文件时出现"/usr/bin/ld: errno: TLS定义in /lib/libc.so.6“
EN

Stack Overflow用户
提问于 2015-03-23 17:01:27
回答 2查看 4.9K关注 0票数 2

在ubuntu 32位桌面系统上编译我的程序时出现此错误。我假设这可能是库的问题。谁能告诉我正确的答案.........

问题是.

代码语言:javascript
复制
/usr/bin/ld: errno: TLS definition in /lib/i386-linux-gnu/libc.so.6 section .tbss mismatches non-TLS reference in /media/9C2C3AB22C3A8774/tez/Ahmadfiles/cern_mohammad/cern/pro/lib/libpacklib.a(remote.o)
/lib/i386-linux-gnu/libc.so.6: could not read symbols: Bad value
collect2: ld returned 1 exit status

makefile:

代码语言:javascript
复制
C = .c
F = .f
O = .o
output = geant_elastic_135
paw2root = h2root
datadisk = /home/bayat/

.SUFFIXES: $(C) $(F)

SRCS = draw_i$(F) scint_geo$(F) mwpc_geo$(F) gutrev$(F) \
gukine$(F) gustep$(F) material$(F) carb_del_geo$(F)\
uginit$(F) uglast$(F) pipe$(F) function$(F) \
ugeom$(F) guout$(F) ntuple$(F) target$(F)\
pbal_geo$(F) gcalor_unix$(F) guphad$(F)\
guhadr$(F)

OBJS = draw_i$(O) scint_geo$(O) mwpc_geo$(O) gutrev$(O)\
gukine$(O) gustep$(O) material$(O) carb_del_geo$(O)\
uginit$(O) uglast$(O) pipe$(O) function$(O) \
ugeom$(O) guout$(O) ntuple$(O) target$(O) \
pbal_geo$(O) gcalor_unix$(O) guphad$(O)\
guhadr$(O)



CERNLIB = -L/media/9C2C3AB22C3A8774/tez/Ahmadfiles/cern_mohammad/cern/pro/lib
CERNOPT = -L/media/9C2C3AB22C3A8774/tez/Ahmadfiles/cern_mohammad/cern/pro/lib

CERNINCL = -I/media/9C2C3AB22C3A8774/tez/Ahmadfiles/cern_mohammad/cern/pro/include

LIBS = -L/usr/X11R6/lib

LINKLIB = -lgeant321 -lkernlib -lpawlib -lgraflib -lgrafX11 -lX11 -lm \
-lpacklib -lmathlib -lphtools -lg2c -lcrypt -ldl -lnsl -llapack3 \
-lblas


FORTOPT = -x f77-cpp-input -Wall

.c.o:
gcc -c $(CERNINCL) $<

.f.o:
g77 -Wall -c $(FORTOPT) $(CERNOPT) $(CERNINCL) $<



default: $(OBJS)
g77 -Wall main.f -o gbat.exe $(OBJS) $(CERNLIB) $(LIBS) \
$(LINKLIB) $(LINKLIB)

i :$(OBJS)
g77 -Wall gxint321.f -o gint.exe $(OBJS) $(CERNLIB) $(LIBS) \
$(LINKLIB) $(LINKLIB)

t:
$(paw2root) $(output).hbook $(output).root
ls -sh $(output).*
mv $(output).* $(datadisk)
@echo "$(output) transfered to $(datadisk)"

clean:
rm *.o *~ gbat.exe gint.exe

下面是main.f:

代码语言:javascript
复制
PROGRAM POLARIMETER
*
* Main program for polarimeter detector
*
* Declaration
IMPLICIT NONE
INTEGER NGBANK, NWPAWC, MAX_TIME
PARAMETER(NGBANK=60000000,NWPAWC=5000000, MAX_TIME=3000000)
REAL H(NGBANK), Q(NWPAWC)
REAL t
COMMON/GCBANK/H
COMMON/PAWC/Q
*
* Begining of the main program
CALL TIMEST(24.*3600.)
call timel(t)
print *,t
*
* initialize GEANT and HBOOK memory
CALL GZEBRA(NGBANK)
CALL HLIMIT(-NWPAWC)
*
* Open graphics system
* CALL HPLINT(0)
* CALL IGMETA(8,0)
* GEANT initialization
CALL UGINIT
* Event processing
CALL GRUN
* End of run
CALL UGLAST
END 
EN

回答 2

Stack Overflow用户

发布于 2017-06-22 18:35:47

您需要:

代码语言:javascript
复制
#include <errno.h>

不能将它作为外部整型。

票数 6
EN

Stack Overflow用户

发布于 2015-03-23 23:55:08

您尝试将旧的库(libpacklib.a)与较新的glibc混合使用。glibc使用TLS (线程本地存储),而您的库似乎使用较旧的方法。

您可以尝试将glibc降级到没有使用TLS编译的版本,或者将您的库更新到更新的版本(如果您有源代码,可以自己编译)。第一种选择风险很大,除非您将旧系统安装为虚拟机,或者针对您的程序的特定版本的glibc进行链接。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29206365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档