Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.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++ 如何解决这个问题;未解析扩展符号_DllMainCRTStartup@12&引用;?_C++_C_Visual Studio_Dll - Fatal编程技术网

C++ 如何解决这个问题;未解析扩展符号_DllMainCRTStartup@12&引用;?

C++ 如何解决这个问题;未解析扩展符号_DllMainCRTStartup@12&引用;?,c++,c,visual-studio,dll,C++,C,Visual Studio,Dll,我想从我的源代码构建一个DLL文件,但我有一个错误。在链接过程中,命令行无法解析这么多对象,因此放弃了链接 我决定将对象拆分为两个库,然后从这两个库中创建DLL 我运行makefile,但链接因新错误而中断:未解析的外部符号_DllMainCRTStartup@12 我使用以下设置: 编译器选项:/Od/MT/EHsc/MP/Zi/Zl/Zp8/c/DSOMEDEFINE 链接器选项:/MAPINFO:EXPORTS/SUBSYSTEM:WINDOWS/MACHINE:X86/MANIFEST

我想从我的源代码构建一个DLL文件,但我有一个错误。在链接过程中,命令行无法解析这么多对象,因此放弃了链接

我决定将对象拆分为两个库,然后从这两个库中创建DLL

我运行makefile,但链接因新错误而中断:
未解析的外部符号_DllMainCRTStartup@12

我使用以下设置:

  • 编译器选项:
    /Od/MT/EHsc/MP/Zi/Zl/Zp8/c/DSOMEDEFINE
  • 链接器选项:
    /MAPINFO:EXPORTS/SUBSYSTEM:WINDOWS/MACHINE:X86/MANIFEST/INCREMENTAL:NO/NOLOGO/DLL/DEBUG/OUT:“$(\uuu NAME.DLL)/LIBPATH:$(\uu MS\u LIB\u PATH)\
    /LIBPATH:“$(SW\u HOME)\lib”/LIBPATH:$(SW\u HOME)\common\lib”/PDB:$(\u NAME).PDB”/MAP:$(\u NAME.MAP)
我的构建过程分为三个步骤:

第一步:编译所有对象

第二步:使用lib.exe创建两个扩展名为*.lib的文件

第三步:使用link.exe从LIB文件创建DLL文件

但是我的标题中有一个链接错误

因此,我假设出现问题的原因是,链接期间指向visual studio文件夹的某些路径不正确,或者在拆分两个库中的对象时,出现了一些错误,一些信息丢失。 或者我没有为编译器和链接器使用正确的选项


有人能帮我解决这个问题吗?

这不是对你问题的直接回答,而是用简单的英语解释可能出现的问题

如果调用函数,首先必须为其提供声明。编译器将根据声明检查您的调用。如果函数是库函数,编译器将在库的一个接口文件中查找它(例如,
GetTickCount
声明位于
WinBase.h
)。如果未包含声明所在的文件,编译器将发出错误(
GetTickCount
notfound)

如果调用的函数是库函数,则必须提供实现该函数的库(
GetTickCount
位于
kernel32.lib
)。如果链接器在提供的库中找不到函数,它将发出错误(未解析的外部符号
GetTickCount

实际上,您没有在选项中指定任何库,只指定一些附加库路径(
/LIBPATH
)。因此,链接器找不到您正在调用的函数的实现:“在链接过程中,命令行无法解析这么多对象并放弃了链接。”这就是自动生成的选项的样子(注意区别):

关于CRT,再次让VC为您做这项工作。让VC选择运行库:

/Yu"stdafx.h" 
/GS /GL /analyze- /W3 /Gy /Zc:wchar_t /Zi /Gm- /O2 
/Fd"Release\vc140.pdb" 
/Zc:inline 
/fp:precise 
/D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "WIN32PROJECT1_EXPORTS" /D "_WINDLL" /D "_UNICODE" /D "UNICODE" 
/errorReport:prompt 
/WX- 
/Zc:forScope 
/Gd /Oy- /Oi /MD 
/Fa"Release\" 
/EHsc 
/nologo 
/Fo"Release\" 
/Fp"Release\Win32Project1.pch"
如果你坚持手工操作,以下是一些有趣的阅读资料:


有一件事是标准化的:有很多库路径,但没有库。我建议从newproject向导生成一些示例/测试项目,并检查生成的link命令。您可以在项目属性中查看该命令。DllMainCrtStartup是DLL的CRT入口点函数。您要么是针对错误的CRT库进行链接,要么是使用错误的设置进行编译。我怀疑任何人是否有耐心解决此问题,并在添加文件时对其进行编译。试着理解你在做什么。
/Yu"stdafx.h" 
/GS /GL /analyze- /W3 /Gy /Zc:wchar_t /Zi /Gm- /O2 
/Fd"Release\vc140.pdb" 
/Zc:inline 
/fp:precise 
/D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "WIN32PROJECT1_EXPORTS" /D "_WINDLL" /D "_UNICODE" /D "UNICODE" 
/errorReport:prompt 
/WX- 
/Zc:forScope 
/Gd /Oy- /Oi /MD 
/Fa"Release\" 
/EHsc 
/nologo 
/Fo"Release\" 
/Fp"Release\Win32Project1.pch"