无法在OS X Yosemite上制作gunplot。未定义符号。

尝试在 OS X Yosemite(10.10.4)下制作 gunplot 5.0.0,但出现错误:

$ make
/Applications/Xcode.app/Contents/Developer/usr/bin/make  all-recursive
Making all in config
make[2]: Nothing to be done for `all'.
Making all in m4
make[2]: Nothing to be done for `all'.
Making all in term
make[2]: Nothing to be done for `all'.
Making all in src
/Applications/Xcode.app/Contents/Developer/usr/bin/make  all-recursive
Making all in wxterminal
make[4]: Nothing to be done for `all'.
Making all in qtterminal
make[4]: Nothing to be done for `all'.
c++  -g -O2   -o gnuplot alloc.o axis.o breaders.o boundary.o color.o command.o contour.o datablock.o datafile.o dynarray.o eval.o external.o fit.o gadgets.o getcolor.o graph3d.o graphics.o help.o hidden3d.o history.o internal.o interpol.o libcerf.o matrix.o misc.o mouse.o multiplot.o parse.o plot.o plot2d.o plot3d.o pm3d.o readline.o save.o scanner.o set.o show.o specfun.o standard.o stats.o stdfn.o tables.o tabulate.o term.o time.o unset.o util.o util3d.o variable.o version.o     -lreadline  -lncurses  -lz    -llua -liconv
Undefined symbols for architecture x86_64:
  "_luaL_checkint", referenced from:
      _LUA_GP_int_error in term.o
      _LUA_GP_int_warn in term.o
     (maybe you meant: _luaL_checkinteger)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[4]: *** [gnuplot] Error 1
make[3]: *** [all-recursive] Error 1
make[2]: *** [all] Error 2
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2

似乎与 lua 相关。这是我的 lua 环境:

$ lua -v
Lua 5.3.0  Copyright (C) 1994-2015 Lua.org, PUC-Rio

我不理解 make 的输出,请帮忙!

点赞
用户1442917
用户1442917

看起来你所编译的模块/应用程序不兼容Lua 5.3。它使用了luaL_checkint,但Lua 5.3使用了luaL_checkinteger。你需要更新该模块,或使用兼容开关LUA_COMPAT_APIINTCASTS(LUA_COMPAT_5_2也可以,因为它包括LUA_COMPAT_APIINTCASTS)。

2015-07-28 05:41:34
用户585053
用户585053

当我使用macports并尝试编译gnuplot(作为latex2rtf的依赖项)时,我遇到了相同的问题。最终修复相对简单...

在我需要的gnuplot版本(gnuplot-5.0.1)中,在term文件夹中的lua.trm文件中有两个对luaL_checkint的引用:

./term/lua.trm:      t_num = luaL_checkint(L, 1);
./term/lua.trm:      t_num = luaL_checkint(L, 1);
./term/lua.trm:  token_cnt = luaL_checkinteger(L, 1);

将luaL_checkint更改为luaL_checkinteger就可以解决问题。请参见Paul Kulchenko的答案,了解此兼容性问题的原因。

2015-09-17 21:06:19