C++ 如何使用C++;标准图书馆?

C++ 如何使用C++;标准图书馆?,c++,linker,clang,static-linking,C++,Linker,Clang,Static Linking,我有一个对象文件(a.obj),我需要从命令行通过链接器调用获取可执行文件(a.exe)。 我从该程序收到一个.obj文件: #include "stdio.h" int main(){ puts("Hello world"); } 我使用clang编译器生成带有后续参数的.obj文件:“clang.exe-c a.cpp” 我的问题是使用“put”方法,它是在标准库(可能是libvcruntime.lib)中定义的,我不知道链接到标准库时使用哪些参数 我的链接器这是Microsoft

我有一个对象文件(a.obj),我需要从命令行通过链接器调用获取可执行文件(a.exe)。 我从该程序收到一个.obj文件:

#include "stdio.h"
int main(){
    puts("Hello world");
}
我使用clang编译器生成带有后续参数的.obj文件:“clang.exe-c a.cpp”

我的问题是使用“put”方法,它是在标准库(可能是libvcruntime.lib)中定义的,我不知道链接到标准库时使用哪些参数

我的链接器这是Microsoft link.exe,我也可以从llvm项目的lld链接器中获得(更可取)


我的全局目标-这是从llvm ir获取可执行文件,并从代码调用lld链接器,但其其他历史记录:)

Visual Studio

在项目配置中指定
/MT(d)
而不是
/MD(d)

叮当声


-静态libstdc++-静态libgcc

> P>如果您使用Clang构建Windows,并且您想使用VisualC++的标准库,建议使用<代码> ClangCl</Cl>,它是一个将VisualC++命令行选项转换成Clon的本地选项的驱动程序。 你说你在写:

clang -c a.cpp
-c
选项要求编译器只生成对象文件并停止(而不是将对象文件发送到链接器)。听起来你想让clang调用链接器,所以你应该省略
-c

要使用标准库的静态版本,请指定
/MT
(如果需要标准库的调试版本,请指定
/MTd

总而言之,这应该对您有用:

clang-cl /MT a.cpp
clang cl
/MT
转换为clang的等效选项,然后运行clang。当clang编译完对象文件后,它会自动调用lld(LLVM链接器),其选项与编译时使用的选项兼容,这将生成一个可执行文件


有一段时间,当使用clang为Windows编译时,您需要使用Microsoft的链接而不是lld。但最新版本可以使用lld,事实上,默认情况下将使用lld。

试试
clang.exe a.obj
。大多数编译器都可以调用链接器。您不需要显式地调用链接器
clang.exe a.cpp
将编译并链接可执行文件。请尝试安装Visual Studio。@ThomasSablik谢谢您的评论,但在我的问题中,先决条件是从命令行使用链接器。因为我有一个我的小编译器项目,但它只生成obj文件
clang.exe a.obj
将调用LinkerTanks以获得答案,但在我的问题中,我只能使用命令行中的链接器。因为我有一个我的小编译器项目,但它只生成obj文件谢谢回答!事实上,我有一个大项目,但在实施过程中,我遇到了问题中描述的问题。我的项目是一个基于llvm的编译器。这个编译器可以生成目标文件。我的目标是生成可执行文件,因此我认为在代码中使用lld命令:“lld::coff::link(args,false,llvm::errs());”。解析“puts”符号的args参数应该是什么