C++ 如何解决这个问题;未解析扩展符号_DllMainCRTStartup@12&引用;?
我想从我的源代码构建一个DLL文件,但我有一个错误。在链接过程中,命令行无法解析这么多对象,因此放弃了链接 我决定将对象拆分为两个库,然后从这两个库中创建DLL 我运行makefile,但链接因新错误而中断: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
未解析的外部符号_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)
有人能帮我解决这个问题吗?这不是对你问题的直接回答,而是用简单的英语解释可能出现的问题 如果调用函数,首先必须为其提供声明。编译器将根据声明检查您的调用。如果函数是库函数,编译器将在库的一个接口文件中查找它(例如,
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"
如果你坚持手工操作,以下是一些有趣的阅读资料:
/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"