2011-10-14 106 views
1

是否有可能在没有lib的情况下编译C++? 因为当我试图编译我的程序与Mingw和cygwin的.exe文件后,我无法运行它,它说,有一个缺少的库。对于cygwin,它是“cygwin1.dll”。是否可以在没有lib的情况下编译C++?

+1

试试'-mno-cygwin'。 –

+0

重复http://stackoverflow.com/questions/338406/cygwin1-dll-not-found-when-running-a-program-written-in-c-how-can-i-make-windo – Griwes

+2

@Griwes:几乎不。那个人想找图书馆;这个人不想使用它(但不能)。 –

回答

4

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

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

不过小记。你的问题 - “有没有可能编译C++没有lib?”是不正确的,因为有总是对libs的一些依赖(除非你正在为没有OS的准系统硬件构建二进制文件),例如Windows的user32.dll。当然,Cygwin和MinGW都不适合这一点。

2

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

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

2

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

相关问题