我正在使用Visual Studio 2010的工具链来生成DLL。具体来说,我想要一个Matlab模块。我相信我非常接近,但我遇到了以下错误:
LIBCMT.lib(crt0.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
.libs/AverageFilter.mexw32 : fatal error LNK1120: 1 unresolved externals
我的DLL中没有这样的符号,因为共享库中没有这样的符号是没有意义的。但是,'libcmt.lib'包括可执行文件和DLL的符号。因此,我理解错误,但由于我明确地创建了一个DLL,我希望微软的链接器忽略这个特殊的未解析符号。
据我所知,在生成DLL时,期望没有未定义的符号,但由于唯一这样的符号无关紧要,所以我决定使用'/ FORCE'选项。我真的不喜欢这个解决方案,但首先我想要一个有效的Matlab模块,然后改进我的解决方案。
不幸的是,使用'/ FORCE'选项会导致以下错误:
cl : Command line error D8021 : invalid numeric argument '/FORCE'
如何解决这些错误?有没有办法让微软的链接器忽略特定的未解析符号?
答案 0 :(得分:1)
Windows中的Exe和Dll如果包含可执行代码则需要一个入口点,请参阅DllMain的MSDN页面:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms682583(v=vs.85).aspx
对于exe,它往往是控制台应用程序的main(),或纯Win32 API应用程序的WinMain。
由于你的DLL想要一个main(),我假设你必须创建一个EXE控制台项目,然后再将其改为DLL。
要解决您的问题,您需要创建入口点函数,通常是DllMain,但在您的情况下实际上是主要的。你的DLL的入口点什么都不做(即空/存根函数),这将允许它链接,并由操作系统加载/卸载,然后允许你的客户端调用你的代码:)。