在使用VS 2010 C++编译项目时出现错误。

4
我正在尝试在VS 2010中编译我创建的软件管理程序项目。在VS6和VS2005中,它可以完美编译。 原始版本存在一些错误,我希望稍后修复,但首先需要让它编译。 在VS 6和VS 2005中它可以完美编译。 我添加了库#pragma comment(lib,"bufferoverflowU.lib")到每个需要它的文件(.cpp)中。 然而,使用bufferoverflowU.lib没有解决任何问题。 以下是错误信息:
1>------ Operación Volver a generar todo iniciada: proyecto: Gestion_v1, configuración: Release Win32 ------
1> StdAfx.cpp
1> WDoS.cpp
1> Helpers.cpp
1> Gestion.cpp
1> WWW.cpp
1>WWW.cpp(141): warning C4018: '<' : no coinciden signed/unsigned
1>WWW.cpp(136): warning C4101: 'dwTmp' : variable local sin referencia
1>WWW.cpp(481): warning C4244: '=' : conversion from 'DWORD' to 'char'; possible loss of data
1>WWW.cpp(482): warning C4244: '=' : conversion from 'DWORD' to 'char'; possible loss of data
1> Generando código...
1>LINK : warning LNK4108: /ALIGN specified without /DRIVER; image may not run
1>WDoS.obj : error LNK2019: unresolved external symbol ___security_cookie referenced in function "unsigned long __stdcall WDoS_HTTP(void *)" (?WDoS_HTTP@@YGKPAX@Z)
1>Gstion.obj : error LNK2001: unresolved external symbol ___security_cookie
1>WWW.obj : error LNK2001: unresolved external symbol ___security_cookie
1>WDoS.obj : error LNK2019: unresolved external symbol @__security_check_cookie@4 referenced in function "unsigned long __stdcall WDoS_HTTP(void *)" (?WDoS_HTTP@@YGKPAX@Z)
1>Gestion.obj : error LNK2001: unresolved external symbol @__security_check_cookie@4 
1>WWW.obj : error LNK2001: unresolved external symbol @__security_check_cookie@4
1>.\Release/Gestion_v1.exe : fatal error LNK1120: 2 unresolved externals
========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ==========

有什么想法吗? 谢谢

你能把错误信息翻译成英文吗?如果所有信息都是英文,更多的人就能帮助诊断问题了。 - Cornstalks
好的,我已经翻译成中文了。 - aleksander haugas
你尝试过这个帖子中提到的方法吗?(http://www.pcreview.co.uk/forums/unresolved-external-symbol-___security_cookie-t1428747.html) - Cornstalks
是的,但对我没有用,我在另一天看到了这篇文章。 - aleksander haugas
2个回答

7
您未解决的外部引用是使用 /GS(缓冲区安全检查)编译器标志进行编译,但未链接到 CRT (/NODEFAULTLIB) 的结果。如果未指定 /GS,则默认启用。您可以尝试通过指定 /GS- 来禁用缓冲区安全检查。
或者,您可以尝试添加所需的代码片段。 __security_cookie 在与 Visual Studio 一起提供的 CRT 源的 <gs_cookie.c> 中定义,在 <process.h> 中声明。因为您明确指定了 WinMain 作为入口点并且不依赖于 CRT 执行所需的初始化,所以您必须自行调用 __security_init_cookie。可能需要更多操作才能使其编译通过,但这应该作为一个起点。

抱歉,找不到 <gs_cookie.c> 文件和 /GS 或 /GS- 命令未找到,但找到了 <process.h>。 - aleksander haugas
@aleksander:<gs_cookie.c>随Visual Studio一起提供,除非您使用的是Express版本。它位于<VS Install Dir>\VC\crt\src下。/GS是编译器开关,而不是命令。 - IInspectable
好的,我找到了gs_cookie.c文件,但为什么它在我的Visual Studio中没有链接呢?我使用的是Visual Studio 2010专业版(试用版),而不是Express版本,但/GS却显示未识别省略。 - aleksander haugas
谢谢,部分解决方案对我有用,我找到了gs_cookie.c并将其复制/粘贴到我的目录中,每次我将这些代码行放入我的代码中:#include "gs_cookie.c",现在我得到了这个错误:1>WDoS.obj : error LNK2019: unresolved external symbol @__security_check_cookie@4 referenced in function "unsigned long __stdcall WDoS_HTTP(void *)" (?WDoS_HTTP@@YGKPAX@Z) 1>Gestion.obj : error LNK2001: unresolved external symbol @__security_check_cookie@4 1>WWW.obj : error LNK2001: unresolved external symbol @__security_check_cookie@4 - aleksander haugas
1
@aleksander:正如我所说,这还有更多的内容。禁用缓冲区安全检查要容易得多。/GS/GS-开关应该在您的Visual Studio 2010版本中得到支持。右键单击项目并选择“属性”。导航到“配置属性”->“C/C++”->“代码生成”。在此项目下,将“缓冲区安全检查”从“Yes (/GS)”更改为“No (/GS-)”。或者,您可以在“附加选项”下为“命令行”指定/GS-(也可通过配置属性获得)。 - IInspectable

-3

链接器错误与字符编码问题无关。 - IInspectable
提出了一个不起作用的想法,我尝试了所有可用的选项并获得了更多的 utf-8 错误,但没有 _security_cookie 错误,无论如何感谢您的帮助。 - aleksander haugas
编译器代码:/OUT:".\Release/Gestion_v1.exe" /INCREMENTAL:NO /NOLOGO "odbc32.lib" "odbccp32.lib" "ws2_32.lib" "wininet.lib" "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" /NODEFAULTLIB /MANIFEST /ManifestFile:".\Release\Gestion_v1.exe.intermediate.manifest" /ALLOWISOLATION /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /PDB:".\Release/Gestion_v1.pdb" /SUBSYSTEM:WINDOWS /PGD:"C:\Gestion - copia\Release\Gestion_v1.pgd" /TLBID:1 /ENTRY:"WinMain" /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORT:QUEUE - aleksander haugas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接