Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 要将项目转换为lib,是否必须去掉WinMain_C++_C_Visual Studio_Visual Studio 2008_Visual C++ - Fatal编程技术网

C++ 要将项目转换为lib,是否必须去掉WinMain

C++ 要将项目转换为lib,是否必须去掉WinMain,c++,c,visual-studio,visual-studio-2008,visual-c++,C++,C,Visual Studio,Visual Studio 2008,Visual C++,假设我在一个项目中构建了一个名为App1的应用程序,其中包含很多类。我决定构建另一个名为App2的项目,我想使用这些类,所以我决定将App1转换成一个lib文件。我必须删除WinMain函数才能这样做,还是可以保留它,编译器将忽略lib文件中的WinMain 特别是在Visual Studio中,您的静态库在任何情况下都不会造成问题。即使您可以将WinMain(或consolemain)添加到静态库中,在第二个项目中使用它的唯一机会是显式地将链接器系统子系统添加到适当的类型 在这种情况下,如果您

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

特别是在Visual Studio中,您的静态库在任何情况下都不会造成问题。即使您可以将
WinMain
(或console
main
)添加到静态库中,在第二个项目中使用它的唯一机会是显式地将
链接器系统子系统
添加到适当的类型

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

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


因此,实际上,如果您将函数导出到库中与不导出到库中没有任何区别,您可以保留它,除非您按照我前面指出的方法进行操作,否则它不会被使用。

特别是在Visual Studio中,您的静态库在任何情况下都不会造成问题。即使您可以将
WinMain
(或console
main
)添加到静态库中,在第二个项目中使用它的唯一机会是显式地将
链接器系统子系统
添加到适当的类型

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

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


因此,实际上,如果您将函数导出到库中或不导出到库中,对您来说没有任何区别,您可以保留它,除非您按照我前面所指的做,否则它不会被使用。

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

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

Ok,如果我决定使用链接器系统子系统。为了使其更有效,我是否必须在WinMain中放置一个方法,然后从第二个应用程序重写它??首先,实际上,您不能重写从静态库中已编译的函数调用的某个方法(这是不可能的,因为该方法很可能在同一个静态库中编译,您无法重新定义它)如果我是您,我会为我的类创建一个头,比如说
class.h
。现在您有了一些方法让它更容易。首先,如果类实现(比如
class.cpp
文件)不是很大,我只需将其添加到我的新项目中(这样一个文件实际上在一个项目中被引用-例如,您也可以将这些项目放在一个文件夹中)。第二种选择是构建一个模板类(这样代码只能在
.h
文件中编写),或者只需在该
.h
文件中编写所有代码(不好,但适用于某些应用程序)第三种选择实际上涉及到这种静态库方法,那么一切都很简单,但不可移植。因此,您将第一个项目定义为静态库(您仍然有
class.h
文件,因为您必须知道类的行为),然后将此库链接到新项目(如果你的项目是在一起的,或者如果只是在一个.LB文件中添加它们,那么就可以通过使用DENDECIES),然后你可以安全地使用你的LIB。注意,使用MSV构建的C++静态库只能由MSVS编译器使用(在一些编译器上也有一些黑客和提示,但是这个想法是清楚的)。好的,那么如果我决定使用链接器系统子系统。为了使它更有效,我是否必须在WinMain中放置一个方法,然后从第二个应用程序重写它??首先,实际上,你不能重写从静态库中已编译的函数调用的某个方法(这是不可能的,因为该方法很可能在同一个静态库中编译,您无法重新定义它)如果我是您,我会为我的类创建一个头,比如说
class.h
。现在您有了一些方法让它更容易。首先,如果类实现(比如
class.cpp
文件)不是很大,我只需将其添加到我的新项目中(这样一个文件实际上在一个项目中被引用-例如,您也可以将这些项目放在一个文件夹中)。第二种选择是构建一个模板类(这样代码只能在
.h
文件中编写),或者只需在该
.h
文件中编写所有代码(不好,但适用于某些应用程序)第三种选择实际上涉及到这种静态库方法,那么一切都很简单,但不可移植。因此,您将第一个项目定义为静态库(您仍然有
class.h
文件,因为您必须知道类的行为),然后将此库链接到新项目(如果你的项目是在一起的,或者如果只是添加了.LIB文件,则通过DENDECIES),然后你可以安全地使用你的LIB。注意,这里使用MSV构建的C++静态库。