我的cpp代码:
int main(int argc, char** argv) {}我使用以下命令来编译和链接它:
// I want to read the result ir
clang -S -emit-llvm main.cpp
// I want to compile directly from ir
llc -filetype=obj main.ll
lld -flavor link main.obj // <root>: undefined symbol: mainCRTStartup Link failed我错过了什么吗?
发布于 2018-08-27 03:36:20
你也需要像这样传递libcmt.lib:lld-link main.obj libcmt.lib。
如果您运行clang-cl main.cpp /FA,然后查看main.asm,您将看到以下几行:
.section .drectve,"yn" .ascii " /DEFAULTLIB:libcmt.lib" .ascii " /DEFAULTLIB:oldnames.lib"
这就是当你不通过有限责任公司时,libcmt.lib会自动链接的原因。
发布于 2017-04-15 23:11:27
mainCRTStartup是由CRT定义的函数( clang可能在第一步中隐式使用了它,并生成一个以mainCRTStartup作为入口点的IR文件)
在第一步中尝试将-nostdlib传递给clang
不过,这意味着您将无法使用标准库函数
如果你想使用CRT函数,但是要链接lld,你需要在本机库中进行链接。
https://stackoverflow.com/questions/36783764
复制相似问题