【问题标题】:do you have to get rid of the WinMain to turn a project into a lib您是否必须摆脱 WinMain 才能将项目变成 lib
【发布时间】:2010-04-27 15:15:34
【问题描述】:

假设我在一个项目中构建了一个名为 App1 的应用程序,其中包含许多类。我决定要构建另一个名为 App2 的项目,并且我想使用这些相同的类,所以我决定将 App1 变成一个 lib 文件。我必须删除 WinMain 函数才能这样做还是可以保留它,编译器将忽略 lib 文件中的 winMain。 ??

【问题讨论】:

    标签: c++ c visual-studio visual-studio-2008 visual-c++


    【解决方案1】:

    尤其是在 Visual Studio 中,您的静态库在任何情况下都不会造成问题。即使您可以将您的 WinMain(或控制台 main)添加到静态库中,但您在第二个项目中使用它的唯一机会是明确地将 Linker-System-Subsystem 设置为适当的类型。

    在这种情况下,如果您匹配例程(WinMain 用于 windows 子系统,main 用于控制台),那么您实际上可以编译您的第二个项目,而无需在其中定义 main 例程,main 将被链接来自您的图书馆。

    不过,在这种情况下,如果您声明 mainALSO 链接您的库,您的本地 main 将具有优先权并会被调用,所以库中的 main 将被忽略。

    所以,如果你把你的函数导出到库中,实际上对你来说并没有什么不同,你可以留下它,除非你按照我之前指出的那样做,否则它不会被使用。

    【讨论】:

    • 好的,如果我决定使用链接器系统子系统。为了使其生效,我是否必须在 WinMain 中放置一个 Method 并从第二个应用程序中覆盖它??
    • 嗯,首先,你实际上不能覆盖从已经在静态库中编译的函数调用的某些方法(这不能这样做,因为该方法很可能被编译在同一个静态库中,你无法重新定义它)
    • 如果我是你,我会为我的班级做一个标题,比如说class.h。现在你有一些方法可以让你更轻松。首先,如果类实现(比如说class.cpp 文件)不大,我只需将它添加到我的新项目中(这样一个文件实际上会在一个项目中引用 - 例如,您也可以将这些项目放入一个文件夹)。第二种选择是构建一个模板类(这样代码只能写在.h 文件中),或者只是将所有代码写在.h 文件中(不好,但适用于某些应用程序)
    • 第三种方案实际上涉及到这个静态库方法,那么一切都很简单,但不可移植。所以,你将你的第一个项目定义为一个静态库(你仍然有你的 class.h 文件,因为你必须知道你的班级是如何行动的),然后将这个库链接到一个新项目(如果你的项目在一起,则通过依赖项或只需添加一个 .lib 文件(如果不是),然后您就可以安全地使用您的 lib。请注意,使用 MSVS 构建的 C++ 静态库只能由 MSVS 编译器使用(在其他一些编译器上也有一些技巧和技巧,但想法很清楚)
    【解决方案2】:

    这样做没有任何意义。在构建 .lib 的自己的库项目中分离这些类,让 两个 应用都使用该库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-07
      • 1970-01-01
      • 2021-12-25
      相关资源
      最近更新 更多