我一直clang-3.5在愉快地构建bintode版本的musl libc,并使用结果生成漂亮的独立可执行文件.
最近的尝试并clang-3.8没有那么开心.似乎bitcode clang-3.8生成了定义的使用函数
compiler-rt/lib/builtins
Run Code Online (Sandbox Code Playgroud)
功能我觉得污染位码典型的例子是mulxc3,mulsc3和muldc3.libgcc如果我对这是什么有任何明确的想法,我可以通过链接,甚至是llvm替代方案来解决这个问题.虽然我宁愿首先防止问题发生.
我已经看到过像rtlib=compiler-rt等标志的提及,但是已经找到了关于这个主题的珍贵文献.
所以这里有一些简单的问题.
是否有可能为防止clang从使用compiler-rt/lib/builtins
中发出的位码?或者如果没有
llvm是否会生成我可以使用的libgcc版本.实际上我可能会建立一个bitcode版本,但这是重点.
喜欢听到一些关于此的指导.
2016年12月8日新增:所以我将通过特定工作流程来说明我的问题,如果他们愿意,人们可以复制,或者更有可能只指出我愚蠢的地方.
所以先看看:
并按照README.to编译中的说明进行操作(这里我在ubuntu 14.04上使用clang-3.8)
WLLVM_CONFIGURE_ONLY=1 CC=wllvm ./configure --target=LLVM --build=LLVM
make
cd lib
extract-bc -b libc.a
Run Code Online (Sandbox Code Playgroud)
你还需要一个简单的可执行文件的bitcode.我将在这里使用nweb.c.
wllvm nweb.c -o nweb
extract-bc nweb
Run Code Online (Sandbox Code Playgroud)
现在我们可以做以下事情:
clang -static -nostdlib nweb.bc libc.a.bc crt1.o libc.a -o nweb
Run Code Online (Sandbox Code Playgroud)
对于clang-3.5,这个工作流程顺利进行,但对于clang-3.8我们得到:
clang -static -nostdlib nweb.bc libc.a.bc crt1.o libc.a -o nweb
/tmp/libc-f734a3.o: In function `cpowl':
libc.a.bc:(.text+0xbb9a): undefined …Run Code Online (Sandbox Code Playgroud)