对“tgetflag”的未定义引用
undefined reference to `tgetflag'
这里我正在编译 Sun Grid Engine 源代码,在执行最后一步时 ./aimk -no-java -no-jni -no-secure -spool-classic -no-dump -no-qmon
,发生如下错误堆栈跟踪
gcc -o tcsh -DSGE_ARCH_STRING=\"linux-x64\" -O3 -Wall -Wstrict-prototypes -DUSE_POLL -DLINUX -DLINUX_NATIVE -DLINUXX64 -DLINUXX64 -D_GNU_SOURCE -DGETHOSTBYNAME_R6 -DGETHOSTBYADDR_R8 -DHAS_VSNPRINTF -DHAS_IN_PORT_T -I/build/berkeleydb/include/ -DTARGET_64BIT -DSPOOLING_classic -DNO_JNI -DCOMPILE_DC -D__SGE_COMPILE_WITH_GETTEXT__ -D__SGE_NO_USERMAPPING__ -DTHREADBINDING -DHWLOC -Wno-error -DPROG_NAME='"qtcsh"' -DLINUXX64 -I. -I.. sh.o sh.dir.o sh.dol.o sh.err.o sh.exec.o sh.char.o sh.exp.o sh.func.o sh.glob.o sh.hist.o sh.init.o sh.lex.o sh.misc.o sh.parse.o sh.print.o sh.proc.o sh.sem.o sh.set.o sh.time.o glob.o mi.termios.o ma.setp.o vms.termcap.o tw.help.o tw.init.o tw.parse.o tw.spell.o tw.comp.o tw.color.o ed.chared.o ed.refresh.o ed.screen.o ed.init.o ed.inputl.o ed.defns.o ed.xmap.o ed.term.o tc.alloc.o tc.bind.o tc.const.o tc.defs.o tc.disc.o tc.func.o tc.os.o tc.printf.o tc.prompt.o tc.sched.o tc.sig.o tc.str.o tc.vers.o tc.who.o -lcrypt -L../../../LINUXX64 -L/build/berkeleydb/lib/ -L. -Wl,-rpath,$ORIGIN/../../lib/linux-x64 -lsge -lpthread -ldl
ed.screen.o: In function `EchoTC':
ed.screen.c:(.text+0x119a): undefined reference to `tgetflag'
ed.screen.c:(.text+0x137e): undefined reference to `tgoto'
ed.screen.c:(.text+0x138e): undefined reference to `tputs'
ed.screen.c:(.text+0x13c5): undefined reference to `tgetstr'
ed.screen.c:(.text+0x14ab): undefined reference to `tgoto'
ed.screen.c:(.text+0x14bd): undefined reference to `tputs'
ed.screen.c:(.text+0x151e): undefined reference to `tputs'
ed.screen.o: In function `SetAttributes':
ed.screen.c:(.text+0x1ab4): undefined reference to `tputs'
ed.screen.c:(.text+0x1b9c): undefined reference to `tputs'
ed.screen.c:(.text+0x1bd4): undefined reference to `tputs'
ed.screen.o:ed.screen.c:(.text+0x1c35): more undefined references to `tputs' follow
ed.screen.o: In function `MoveToChar':
而且我已经用谷歌搜索了tgetflag
函数,就是这个tgetflag(3) - Linux man page. So i thought maybe i lost ncurses
library, more info can see this link,在安装ncurses
相关包并重新编译这样的源代码之后,仍然出现这样的错误,这真是奇怪,这是我的 ncurses 包列表:
[root@localhost source]# rpm -qa | grep "ncurses*"
ncurses-devel-5.9-14.20130511.el7_4.x86_64
ncurses-libs-5.9-14.20130511.el7_4.x86_64
ncurses-5.9-14.20130511.el7_4.x86_64
ncurses-base-5.9-14.20130511.el7_4.noarch
after install ncurses related package and re-compile such source and such error still occurred
你的 link 行缺少 -lncurses
,所以 linking 仍然失败一点也不奇怪——安装库是解决你的问题所必需的,但还不够.
您必须以某种方式将 -lncurses
添加到 link 行。我不知道确切的步骤;我想您可能需要重新配置 tcsh
才能实现。
希望这个回答能带人出去,这是我的步骤:
- 删除此类项目并提取原始 tar.gz 文件
- 确认ncurses相关库已经下载安装
export LD_LIBRARY_PATH=/usr/lib64/:/usr/lib/:/usr/local/lib
,这一步告诉gcc直接获取它需要的正确包
./aimk -no-java -no-jni -no-secure -spool-classic -no-dump -only-depend
./scripts/zerodepend
./aimk -no-java -no-jni -no-secure -spool-classic -no-dump depend
这里我正在编译 Sun Grid Engine 源代码,在执行最后一步时 ./aimk -no-java -no-jni -no-secure -spool-classic -no-dump -no-qmon
,发生如下错误堆栈跟踪
gcc -o tcsh -DSGE_ARCH_STRING=\"linux-x64\" -O3 -Wall -Wstrict-prototypes -DUSE_POLL -DLINUX -DLINUX_NATIVE -DLINUXX64 -DLINUXX64 -D_GNU_SOURCE -DGETHOSTBYNAME_R6 -DGETHOSTBYADDR_R8 -DHAS_VSNPRINTF -DHAS_IN_PORT_T -I/build/berkeleydb/include/ -DTARGET_64BIT -DSPOOLING_classic -DNO_JNI -DCOMPILE_DC -D__SGE_COMPILE_WITH_GETTEXT__ -D__SGE_NO_USERMAPPING__ -DTHREADBINDING -DHWLOC -Wno-error -DPROG_NAME='"qtcsh"' -DLINUXX64 -I. -I.. sh.o sh.dir.o sh.dol.o sh.err.o sh.exec.o sh.char.o sh.exp.o sh.func.o sh.glob.o sh.hist.o sh.init.o sh.lex.o sh.misc.o sh.parse.o sh.print.o sh.proc.o sh.sem.o sh.set.o sh.time.o glob.o mi.termios.o ma.setp.o vms.termcap.o tw.help.o tw.init.o tw.parse.o tw.spell.o tw.comp.o tw.color.o ed.chared.o ed.refresh.o ed.screen.o ed.init.o ed.inputl.o ed.defns.o ed.xmap.o ed.term.o tc.alloc.o tc.bind.o tc.const.o tc.defs.o tc.disc.o tc.func.o tc.os.o tc.printf.o tc.prompt.o tc.sched.o tc.sig.o tc.str.o tc.vers.o tc.who.o -lcrypt -L../../../LINUXX64 -L/build/berkeleydb/lib/ -L. -Wl,-rpath,$ORIGIN/../../lib/linux-x64 -lsge -lpthread -ldl
ed.screen.o: In function `EchoTC':
ed.screen.c:(.text+0x119a): undefined reference to `tgetflag'
ed.screen.c:(.text+0x137e): undefined reference to `tgoto'
ed.screen.c:(.text+0x138e): undefined reference to `tputs'
ed.screen.c:(.text+0x13c5): undefined reference to `tgetstr'
ed.screen.c:(.text+0x14ab): undefined reference to `tgoto'
ed.screen.c:(.text+0x14bd): undefined reference to `tputs'
ed.screen.c:(.text+0x151e): undefined reference to `tputs'
ed.screen.o: In function `SetAttributes':
ed.screen.c:(.text+0x1ab4): undefined reference to `tputs'
ed.screen.c:(.text+0x1b9c): undefined reference to `tputs'
ed.screen.c:(.text+0x1bd4): undefined reference to `tputs'
ed.screen.o:ed.screen.c:(.text+0x1c35): more undefined references to `tputs' follow
ed.screen.o: In function `MoveToChar':
而且我已经用谷歌搜索了tgetflag
函数,就是这个tgetflag(3) - Linux man page. So i thought maybe i lost ncurses
library, more info can see this link,在安装ncurses
相关包并重新编译这样的源代码之后,仍然出现这样的错误,这真是奇怪,这是我的 ncurses 包列表:
[root@localhost source]# rpm -qa | grep "ncurses*"
ncurses-devel-5.9-14.20130511.el7_4.x86_64
ncurses-libs-5.9-14.20130511.el7_4.x86_64
ncurses-5.9-14.20130511.el7_4.x86_64
ncurses-base-5.9-14.20130511.el7_4.noarch
after install ncurses related package and re-compile such source and such error still occurred
你的 link 行缺少 -lncurses
,所以 linking 仍然失败一点也不奇怪——安装库是解决你的问题所必需的,但还不够.
您必须以某种方式将 -lncurses
添加到 link 行。我不知道确切的步骤;我想您可能需要重新配置 tcsh
才能实现。
希望这个回答能带人出去,这是我的步骤:
- 删除此类项目并提取原始 tar.gz 文件
- 确认ncurses相关库已经下载安装
export LD_LIBRARY_PATH=/usr/lib64/:/usr/lib/:/usr/local/lib
,这一步告诉gcc直接获取它需要的正确包./aimk -no-java -no-jni -no-secure -spool-classic -no-dump -only-depend
./scripts/zerodepend
./aimk -no-java -no-jni -no-secure -spool-classic -no-dump depend