是否可以在没有任何库的情况下编译c ++?

时间:2011-10-14 11:15:10

标签: c++ compilation

是否可以在没有任何lib的情况下编译c ++? 因为当我试图用.w文件制作后用Mingw和cygwin编译我的程序时,我无法运行它,它说有一个丢失的库。对于cygwin来说,它是“cygwin1.dll”。

3 个答案:

答案 0 :(得分:4)

使用Cygwin构建的二进制文件始终依赖于cygwin1.dll。 Hovewer,如果你想避免这种情况,请使用链接器选项-mno-cygwin。这样您就可以确保不需要依赖于您需要随应用程序一起提供的cygwin运行时库。

MinGW也有一些本地依赖。特别是,libgcc_s_dw2-1.dll(取决于工具链中使用的展开类型)和mingwm10.dll。要摆脱它们,请为链接器使用-static-libgcc-mthreads选项。请注意,C ++异常取决于此选项。

然而,请注意。你的问题 - “是否有可能在没有任何lib的情况下编译c ++?”是不正确的,因为总是对libs有一些依赖关系(除非你为没有操作系统的准系统硬件构建二进制文件),例如用于Windows的user32.dll。当然,Cygwin和MinGW也不适合。

答案 1 :(得分:2)

这不仅仅是一个图书馆;它是运行使用Cygwin编译的应用程序所需的运行时。

如果您真的使用MinGW,那么您可以完全避免使用-mno-cygwin Cygwin,但即使这样,您也需要MinGW运行时,可能还需要C ++标准库。但是,这些通常可以静态链接,这样您就不需要发送任何依赖项。

答案 2 :(得分:2)

一般答案 - 没有。 通常,C ++代码所需的运行时支持,以启用RTTI和异常处理等功能。 所以无论如何,你必须动态或静态地将可执行文件与libstdc ++链接起来。