gpt4 book ai didi

c++ - 链接 DLL 时的命令行错误

转载 作者:太空宇宙 更新时间:2023-11-04 11:55:30 26 4
gpt4 key购买 nike

我正在使用 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,所以我希望 Microsoft 的链接器忽略这个特定的未解析符号。

据我所知,在生成 DLL 时,期望没有 undefined symbol ,但由于唯一这样的符号是无关紧要的,所以我决定使用“/FORCE”选项。我真的不喜欢这个解决方案,但首先我想要一个工作的 Matlab 模块,然后改进我的解决方案。

不幸的是,使用“/FORCE”选项会导致以下错误:

cl : Command line error D8021 : invalid numeric argument '/FORCE'

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

最佳答案

如果 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 的入口点函数,但在您的情况下实际上是 main。你的 DLL 的入口点什么都不做(即空/ stub 函数),这将允许它链接,并由操作系统加载/卸载,然后允许你的客户端调用你的代码:)。

关于c++ - 链接 DLL 时的命令行错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16309237/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com