Windows/clang连接器未定义符号mainCRTStartup

vfh0ocws  于 2022-12-14  发布在  Windows
关注(0)|答案(1)|浏览(215)

我使用Clang编译,需要将不同的.obj文件捆绑到一个. lib中。然后将这个.lib编译成可执行文件。问题是,尽管它可以在Unix上工作(ld.lld -r文件... -o文件.lib),但我不能将-r用于lld-link,使用/lib选项会导致错误:

lld-link: error: <root>: undefined symbol: mainCRTStartup

我尝试了同样的过程,但是在unix上。这里,我们有ELF对象文件,并且可以执行-relocatable(-r)将ELF对象合并成一个。在windows上,没有-relocatable选项用于COFF,afaik。并且/LIB实际上产生了一个包,而不是一个COFF对象。如果我不对包含main的COFF文件使用/LIB,可执行文件将编译。

7bsow1i6

7bsow1i61#

不确定是否可以将COFF或MACH-O对象文件合并为一个,但我用mainCRTStartup解决了我的问题。
我的最终.lib文件是我的代码中的所有内容的混合体,它是从我所有项目中的各个.obj文件组装而成的。
我使用ld(插入正确的驱动程序)-r(/lib)file1.obj file 2. obj... -o(/out:)Final.lib编译它
现在是最重要的时刻!现在我们必须使用Clang编译这个.lib

clang++ -fuse-ld=lld Final.lib -o App.a(exe)

这是唯一的事情,实际上解决了我的问题。我不知道,为什么使用LLD作为LD修复一切,但只是接受它,好吗?
祝你们好运,朋友们!

相关问题