我不是经验丰富的程序员/开发人员/软件工程师,但我需要手动构建此旧版本的guile-2.0.11,而不要使用自制软件(安装了最新版的guile)。我从GitHub存储库下载了guile-2.0.11的压缩包,将其解压缩并运行了shell脚本autogen.sh。这产生了一个配置可执行文件,该可执行文件运行完毕并生成了一个Makefile。当我运行make时,构建将继续进行直到出现此错误:

Undefined symbols for architecture x86_64:
"_clock_getcpuclockid", referenced from:
_scm_init_stime in libguile_2.0_la-stime.o
"_ffi_call", referenced from:
 _scm_i_foreign_call in libguile_2.0_la-foreign.o


还有16个类似“ ffi”的消息。然后错误消息完成

ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see      invocation)
make[3]: *** [libguile-2.0.la] Error 1
make[2]: *** [all] Error 2
make[1]: *** [all-recursive] Error 1


链接器显然找不到这些符号。显式链接命令相当广泛。.如果我使用“ make V = 1”,它将显示所有选项,包含和库路径。这是开始,显示了选项和路径:

Applications/Xcode.app/Contents/Developer/usr/bin/make  all-am
/bin/sh ../libtool  --tag=CC   --mode=link gcc -  I/usr/local/opt/gettext/include -I/usr/local/include -  I/usr/local/opt/readline/include -  I/usr/local/Cellar/gettext/0.19.8.1/include -D_THREAD_SAFE  -Wall -  Wmissing-prototypes -Wdeclaration-after-statement -Wpointer-arith -Wswitch-  enum -fno-strict-aliasing -fwrapv -fvisibility=hidden -  I/usr/local/Cellar/bdw-gc/7.6.0/include -g -O2 -L/usr/local/Cellar/bdw-  gc/7.6.0/lib -lgc -L/usr/local/opt/libffi/lib                -liconv -  L/usr/local/opt/gettext/lib -lintl -R/usr/local/opt/gettext/lib -Wl,-  framework -Wl,CoreFoundation -L/usr/local/lib -lunistring -R/usr/local/lib        -version-info 29:2:7 -export-dynamic -no-undefined   -L/usr/local/opt/gettext/lib -L/usr/local/lib -L/usr/local/opt/readline/lib     -L/usr/local/Cellar/gettext/0.19.8.1/lib -o libguile-2.0.la -rpath /usr/local/lib


然后是libtool。

libtool: link: gcc -dynamiclib  -o .libs/libguile-2.0.22.dylib    .libs/libguile_2.0_la-alist.o .libs/libguile_2.0_la-arbiters.o   .libs/libguile_2.0_la-array-handle.o


还有很多xxxx.o

然后

-Wl,-force_load,../lib/.libs/libgnu.a  -L/usr/local/Cellar/bdw-  gc/7.6.0/lib -lgc -L/usr/local/opt/libffi/lib -L/usr/local/opt/gettext/lib   -L/usr/local/lib -L/usr/local/opt/readline/lib -  L/usr/local/Cellar/gettext/0.19.8.1/lib -lintl -lunistring -liconv -lgmp -  lltdl -lm  -g -O2 -Wl,-framework -Wl,CoreFoundation   -install_name    /usr/local/lib/libguile-2.0.22.dylib -compatibility_version 30 - current_version 30.2 -Wl,-single_module


ffilib的最新版本位于ld路径中的symlink / usr / local / opt / libffi / lib中,因此我认为链接器可以找到它。任何帮助将不胜感激。

最佳答案

这个问题实际上是两个问题:(1)未定义符号“ _clock_getcpuclockid”和(2)所有“ ffi”未定义符号。第二个问题的答案是here,第一个问题的答案是here。可能还有其他解决方案,但这导致在我的macOS Sierra(10.12.5)上安装了guile-2.0.11,

关于c - 在macOS Sierra上构建guile-2.0.11失败:体系结构x86_64的 undefined symbol ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45013549/

10-12 18:04