链接DLL时命令行错误

Command Line Error when Linking DLL

本文关键字:错误 命令行 DLL 链接      更新时间:2023-10-16

我正在使用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'

如何解决这些错误?有没有办法让微软的链接器忽略一个特定的未解析的符号?

windows中的Exe和Dll如果包含可执行代码,则需要入口点,请参阅MSDN页面中的DllMain:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms682583 (v = vs.85) . aspx

对于exe,它倾向于为控制台应用程序的main(),或为纯win32 API应用程序的WinMain。

由于您的DLL需要一个main(),我认为您必须创建一个EXE控制台项目,然后将其更改为DLL。

要解决您的问题,您需要创建入口点函数,通常是DllMain,但在您的情况下实际上是main。你的DLL的入口点不能做任何事情(即空/存根函数),这将允许它链接,并由操作系统加载/卸载,然后允许你的客户端调用你的代码:)。