【发布时间】:2017-01-01 21:15:42
【问题描述】:
在我的stack.yaml 中使用以下内容(尝试)通过堆栈编译静态二进制文件时:
ghc-options:
"*": -static -optc-static -optl-static -optl-pthread -fPIC
我收到此错误:
usr/bin/ld: /usr/lib/gcc/x86_64-amazon-linux/4.8.3/crtbeginT.o: relocation R_X86_64_32 against `__TMC_END__' can not be used when making a shared object; recompile with -fPIC
/usr/lib/gcc/x86_64-amazon-linux/4.8.3/crtbeginT.o: could not read symbols: Bad value
collect2: error: ld returned 1 exit status
`gcc' failed in phase `Linker'. (Exit code: 1)
我正在使用启用了 docker 的堆栈和自定义的 Amazon Linux 映像来构建用于 AWS Lambda 的静态二进制文件。
我之前没有使用静态二进制编译的经验,所以我对这个链接器错误感到有些困惑。请问有什么想法吗?
这是使用 -v 的 gcc 参数:
/usr/bin/gcc -fno-stack-protector -DTABLES_NEXT_TO_CODE '-Wl,--hash-size=31' -Wl,--reduce-memory-overheads -Wl,--no-as-needed -Wl,-rpath<snipped LOADS> -lHSghc<SNIPPED LOADS> -lpq -lz -lrt -lutil -ldl -lgmp
【问题讨论】:
-
如果您可以提供失败的
gcc调用,这将有所帮助。可能将-v添加到ghc-options行就可以了。 -
嗯,这是一个错误吗?使用 gcc 调用更新帖子
-
This blog post 使用 Alpine 和 Musl 可能是更可靠的方法。你可以在this build script看到它的实践。
-
优秀的帖子和示例,但不幸的是它导致
Error parsing targets: The specified targets matched no packages. Perhaps you need to run 'stack init'?
标签: haskell gcc ghc haskell-stack