VISUAL C++调试时出现LNK2001 与 LNK1120错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VISUAL C++调试时出现LNK2001 与 LNK1120错误相关的知识,希望对你有一定的参考价值。

源程序:
#include <windows.h>
#include <stdio.h>

LRESULT CALLBACK WinSunProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);

int WINAPI WinMain(
HINSTANCE hInstance, // handle to current instance
HINSTANCE hPrevInstance, // handle to previous instance
LPSTR lpCmdLine, // command line
int nCmdShow // show state
)

WNDCLASS wndcls;
wndcls.cbClsExtra=0;
wndcls.cbWndExtra=0;
wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);
wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);
wndcls.hInstance=hInstance;
wndcls.lpfnWndProc=WinSunProc;
wndcls.lpszClassName="Weixin2003";
wndcls.lpszMenuName=NULL;
wndcls.style=CS_HREDRAW | CS_VREDRAW;
RegisterClass(&wndcls);

HWND hwnd;
hwnd=CreateWindow("Weixin2003","北京维新科学技术培训中心",WS_OVERLAPPEDWINDOW,
0,0,600,400,NULL,NULL,hInstance,NULL);

ShowWindow(hwnd,SW_SHOWNORMAL);
UpdateWindow(hwnd);

MSG msg;
while(GetMessage(&msg,NULL,0,0))

TranslateMessage(&msg);
DispatchMessage(&msg);

return 0;


LRESULT CALLBACK WinSunProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)

switch(uMsg)

case WM_CHAR:
char szChar[20];
sprintf(szChar,"char is %d",wParam);
MessageBox(hwnd,szChar,"weixin",0);
break;
case WM_LBUTTONDOWN:
MessageBox(hwnd,"mouse clicked","weixin",0);
HDC hdc;
hdc=GetDC(hwnd);
TextOut(hdc,0,50,"计算机编程语言培训",strlen("计算机编程语言培训"));
ReleaseDC(hwnd,hdc);
break;
case WM_PAINT:
HDC hDC;
PAINTSTRUCT ps;
hDC=BeginPaint(hwnd,&ps);
TextOut(hDC,0,0,"维新培训",strlen("维新培训"));
EndPaint(hwnd,&ps);
break;
case WM_CLOSE:
if(IDYES==MessageBox(hwnd,"是否真的结束?","weixin",MB_YESNO))

DestroyWindow(hwnd);

break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);

return 0;


调试后出现
Linking...
LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Debug/WinMain.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

WinMain.exe - 2 error(s), 0 warning(s)
请问谁能帮我解决这个问题。

参考技术A 程序没有错误,是你连接选项设置错了,你建工程的时候是应该建一个win32工程,不应该建控制台程序,所以你重新建一个空的win32工程然后把这个加进去就可以了。。。

使用 Visual Studio 构建和调试 Chromium 时出现错误:错误 LNK1112:模块机器类型“x64”与目标机器类型“X86”冲突

【中文标题】使用 Visual Studio 构建和调试 Chromium 时出现错误:错误 LNK1112:模块机器类型“x64”与目标机器类型“X86”冲突【英文标题】:Building and debugging Chromium using visual studio giving error : error LNK1112: module machine type 'x64' conflicts with target machine type 'X86' 【发布时间】:2015-04-28 22:46:38 【问题描述】:

我想调试 chromium 代码以检查它是如何编译 javascript 代码的。我已经下载了 chromium 代码并尝试使用 Visual Studio 构建 CEF 解决方案文件,但出现以下错误:

错误 LNK1112:模块 机器类型 'x64' 与目标机器类型 'X86' 冲突 \third_party\libjpeg_turbo\jccolss2-64.obj cefclient

错误 MSB3073:命令“call ninja.exe -C ..\out\Debug\cefclient”退出,代码为 1。D:\Ishan\Chromium\Chromium\chromium\src\cef \cefclient.vcxproj cefclient

谁能帮我解决这个错误

谢谢 伊山耆那教

【问题讨论】:

【参考方案1】:

Chromium 只能在 64 位 Windows 上构建,如果您在 64 位上构建 32 位也没关系。 Windows 7 x64 或更高版本是必须的。 您似乎已将构建配置为 64 位(如果您使用的是 ninja,很可能使用 SET GYP_DEFINES=target_arch=x64)但您构建的是 32 位,很可能使用 ninja -C out\Debug。因此,您似乎配置了 64 位版本,但您正在构建 32 位版本。 64 位版本在 Debug_x64(或 Debug_64,我现在不记得了)。 所以: - 如果您配置了 target_arch=x64,请使用 ninja -C out\Debug_x64 构建 - 如果您配置了 target_arch=ia32(或者留空,我认为 Windows 上的默认构建是 32 位),使用 ninja -C out\Debug

构建

AFAIK 你不能在同一个目录中构建 - 但也许我错了 - 32 和 64 构建(主要是因为生成的 .ninja 文件)。 如果您使用 SET GYP_GENERATORS=msvs-ninja,ninja(主要是在生成 Visual Studio 解决方案时),它可能会起作用,但 msvs-ninja 不受支持,也不受维护(不再)。 p>

编辑:从 Visual Studio 示例构建 ninja。 VS External Tools > 添加如下条目:Title Build libcef DebugCommand F:\dev\CEF\2357\build.bat ( F:\dev\CEF\2357\x86\chromium)参数调试初始目录 F:\dev\CEF\2357 我的布局是这样的(构建分支是 2357): F:\dev\CEF\2357 根目录 / 自动化-git.py build.bat x86/ 铬/ build.bat 是下面的文件; x86/ 目录是手动创建的。在 x86 下我有 chromium 的结帐(cef 和 depot_tools 也会出现在 x86/ 下)。我的 build.bat 文件是这样的(细节很容易弄清楚):

@echo off

:: set env vars affecting CEF build
SET GYP_GENERATORS=msvs-ninja,ninja
SET GYP_MSVS_VERSION=2013
SET DEPOT_TOOLS_WIN_TOOLCHAIN=0
SET GYP_DEFINES=target_arch=ia32
SET DEPOT_TOOLS=F:\dev\CEF\2357\x86\depot_tools
SET PATH=%DEPOT_TOOLS%;%PATH%

set ROOTDIST=F:\dev\CEF\2357\x86\.deploy\
set BUILDOUT=F:\dev\CEF\2357\x86\chromium\src\out
set REDIST=F:\dev\CEF\2357\x86\chromium\src\cef\tools\distrib\win
set CEFDIST=3.43.0.2357.18.20150512

:: change to directory if not already there
PUSHD
set CURDIR=%CD%
@echo Current directory is %CURDIR%
if [%CURDIR%] EQU [F:\dev\CEF\2357] goto l_config
F:
cd F:\dev\CEF\2357 
set CURDIR=%CD%
@echo Current directory changed to %CURDIR%

:l_config
F:\dev\CEF\2357\automate-git.py --download-dir=F:\dev\CEF\2357\x86 --branch=2357 --no-update
goto l_build

:l_build
cd x86\chromium\src

if [%1%] EQU [all] goto l_build_all
if [%1%] EQU [debug] goto l_build_dbg
if [%1%] EQU [release] goto l_build_rel
if [%1%] EQU [distrib] goto l_build_distrib
if [%1%] EQU [distclean] goto l_build_distclean
if [%1%] EQU [clean] goto l_build_clean
goto l_error

:l_build_all
@echo Building libcef branch 2357 Debug.
ninja -C out\Debug cefclient
@echo Building libcef branch 2357 Release.
ninja -C out\Release cefclient
@echo Build libcef Debug,Release branch 2357 finished.
goto l_build_distclean

:l_build_dbg
@echo Building libcef branch 2357 Debug.
ninja -C out\Debug cefclient
@echo Build libcef Debug branch 2357 finished.
goto l_end

:l_build_rel
@echo Building libcef branch 2357 Release.
ninja -C out\Release cefclient
@echo Build libcef Release branch 2357 finished.
goto l_end

:l_build_clean
@echo Cleaning build libcef branch 2357.
ninja -C out\Debug -t clean cefclient
ninja -C out\Release -t clean cefclient
@echo Clean libcef branch 2357 finished.
goto l_end

:l_build_distclean
@echo Clean libcef branch 2357 %CEFDIST% distribution.
rmdir /s /q %ROOTDIST%\%CEFDIST%
goto l_build_distrib

:l_build_distrib
@echo Make libcef branch 2357 %CEFDIST% distribution.
@echo Deploy directory: %ROOTDIST%%CEFDIST%
:: /.patch 
:: /include
::  /base
::   /internal
::  /capi
::  /internal
::  /wrapper
:: /lib
::  /Win32
::   /Debug
::    /lib
::    /locales
::   /Release
::    /lib
::    /locales
::
:: ensure target path
mkdir %ROOTDIST%\%CEFDIST%
mkdir %ROOTDIST%\%CEFDIST%\include
mkdir %ROOTDIST%\%CEFDIST%\lib
mkdir %ROOTDIST%\%CEFDIST%\lib\Win32
mkdir %ROOTDIST%\%CEFDIST%\lib\Win32\Debug
mkdir %ROOTDIST%\%CEFDIST%\lib\Win32\Debug\lib
mkdir %ROOTDIST%\%CEFDIST%\lib\Win32\Release
mkdir %ROOTDIST%\%CEFDIST%\lib\Win32\Release\lib

:: include files
xcopy    f:\dev\CEF\2357\x86\chromium\src\cef\include         %ROOTDIST%\%CEFDIST%\include             /S /E /Y /I 
:: bdCefVer.h
copy  /Y f:\dev\CEF\2357\x86\chromium\src\cef\bdCefVer.h      %ROOTDIST%\%CEFDIST%\bdCefVer.h

:: Debug
:: locales
xcopy    %BUILDOUT%\Debug\locales   %ROOTDIST%\%CEFDIST%\lib\Win32\Debug\locales   /S /E /Y /I 
:: lib
copy /Y %BUILDOUT%\Debug\libcef.dll.lib                     %ROOTDIST%\%CEFDIST%\lib\Win32\Debug\lib\libcef.dll.lib
copy /Y %BUILDOUT%\Debug\libEGL.dll.lib                     %ROOTDIST%\%CEFDIST%\lib\Win32\Debug\lib\libEGL.dll.lib
copy /Y %BUILDOUT%\Debug\libGLESv2.dll.lib                  %ROOTDIST%\%CEFDIST%\lib\Win32\Debug\lib\libGLESv2.dll.lib
copy /Y %BUILDOUT%\Debug\ffmpegsumo.dll.lib                 %ROOTDIST%\%CEFDIST%\lib\Win32\Debug\lib\ffmpegsumo.dll.lib
copy /Y %BUILDOUT%\Debug\obj\cef\cef_sandbox.lib            %ROOTDIST%\%CEFDIST%\lib\Win32\Debug\lib\cef_sandbox.lib
copy /Y %BUILDOUT%\Debug\obj\cef\libcef_dll_wrapper.lib     %ROOTDIST%\%CEFDIST%\lib\Win32\Debug\lib\libcef_dll_wrapper.lib
copy /Y %BUILDOUT%\Debug\obj\cef\libcef_static.lib          %ROOTDIST%\%CEFDIST%\lib\Win32\Debug\lib\libcef_static.lib
:: binaries, paks, redistributables
copy /Y %BUILDOUT%\Debug\natives_blob.bin                   %ROOTDIST%\%CEFDIST%\lib\Win32\Debug\natives_blob.bin
copy /Y %BUILDOUT%\Debug\snapshot_blob.bin                  %ROOTDIST%\%CEFDIST%\lib\Win32\Debug\snapshot_blob.bin
copy /Y %BUILDOUT%\Debug\icudtl.dat                         %ROOTDIST%\%CEFDIST%\lib\Win32\Debug\icudtl.dat
:: copy /Y %REDIST%\d3dcompiler_43.dll                      %ROOTDIST%\%CEFDIST%\lib\Win32\Debug\d3dcompiler_43.dll
copy /Y %BUILDOUT%\Debug\d3dcompiler_47.dll                 %ROOTDIST%\%CEFDIST%\lib\Win32\Debug\d3dcompiler_47.dll
copy /Y %BUILDOUT%\Debug\ffmpegsumo.dll                     %ROOTDIST%\%CEFDIST%\lib\Win32\Debug\ffmpegsumo.dll
copy /Y %BUILDOUT%\Debug\ffmpegsumo.dll.pdb                 %ROOTDIST%\%CEFDIST%\lib\Win32\Debug\ffmpegsumo.dll.pdb
copy /Y %BUILDOUT%\Debug\libcef.dll                         %ROOTDIST%\%CEFDIST%\lib\Win32\Debug\libcef.dll
copy /Y %BUILDOUT%\Debug\libcef.dll.pdb                     %ROOTDIST%\%CEFDIST%\lib\Win32\Debug\libcef.dll.pdb
copy /Y %BUILDOUT%\Debug\libEGL.dll                         %ROOTDIST%\%CEFDIST%\lib\Win32\Debug\libEGL.dll
copy /Y %BUILDOUT%\Debug\libEGL.dll.pdb                     %ROOTDIST%\%CEFDIST%\lib\Win32\Debug\libEGL.dll.pdb
copy /Y %BUILDOUT%\Debug\libGLESv2.dll                      %ROOTDIST%\%CEFDIST%\lib\Win32\Debug\libGLESv2.dll
copy /Y %BUILDOUT%\Debug\libGLESv2.dll.pdb                  %ROOTDIST%\%CEFDIST%\lib\Win32\Debug\libGLESv2.dll.pdb
copy /Y %BUILDOUT%\Debug\cefclient.exe                      %ROOTDIST%\%CEFDIST%\lib\Win32\Debug\cefclient.exe
copy /Y %BUILDOUT%\Debug\wow_helper.exe                     %ROOTDIST%\%CEFDIST%\lib\Win32\Debug\wow_helper.exe
copy /Y %BUILDOUT%\Debug\wow_helper.pdb                     %ROOTDIST%\%CEFDIST%\lib\Win32\Debug\wow_helper.pdb
copy /Y %BUILDOUT%\Debug\cef.pak                            %ROOTDIST%\%CEFDIST%\lib\Win32\Debug\cef.pak
copy /Y %BUILDOUT%\Debug\cef_100_percent.pak                %ROOTDIST%\%CEFDIST%\lib\Win32\Debug\cef_100_percent.pak
copy /Y %BUILDOUT%\Debug\cef_200_percent.pak                %ROOTDIST%\%CEFDIST%\lib\Win32\Debug\cef_200_percent.pak
copy /Y %BUILDOUT%\Debug\devtools_resources.pak             %ROOTDIST%\%CEFDIST%\lib\Win32\Debug\devtools_resources.pak

:: Release
:: locales
xcopy    %BUILDOUT%\Release\locales %ROOTDIST%\%CEFDIST%\lib\Win32\Release\locales /S /E /Y /I /F
:: lib
copy /Y %BUILDOUT%\Release\libcef.dll.lib                   %ROOTDIST%\%CEFDIST%\lib\Win32\Release\lib\libcef.dll.lib
copy /Y %BUILDOUT%\Release\libEGL.dll.lib                   %ROOTDIST%\%CEFDIST%\lib\Win32\Release\lib\libEGL.dll.lib
copy /Y %BUILDOUT%\Release\libGLESv2.dll.lib                %ROOTDIST%\%CEFDIST%\lib\Win32\Release\lib\libGLESv2.dll.lib
copy /Y %BUILDOUT%\Release\ffmpegsumo.dll.lib               %ROOTDIST%\%CEFDIST%\lib\Win32\Release\lib\ffmpegsumo.dll.lib
copy /Y %BUILDOUT%\Release\obj\cef\libcef_dll_wrapper.lib   %ROOTDIST%\%CEFDIST%\lib\Win32\Release\lib\libcef_dll_wrapper.lib
copy /Y %BUILDOUT%\Release\obj\cef\libcef_static.lib        %ROOTDIST%\%CEFDIST%\lib\Win32\Release\lib\libcef_static.lib
copy /Y %BUILDOUT%\Release\obj\cef\cef_sandbox.lib          %ROOTDIST%\%CEFDIST%\lib\Win32\Release\lib\cef_sandbox.lib
:: binaries, paks, redistributables
copy /Y %BUILDOUT%\Release\natives_blob.bin                 %ROOTDIST%\%CEFDIST%\lib\Win32\Release\natives_blob.bin
copy /Y %BUILDOUT%\Release\snapshot_blob.bin                %ROOTDIST%\%CEFDIST%\lib\Win32\Release\snapshot_blob.bin
copy /Y %BUILDOUT%\Release\icudtl.dat                       %ROOTDIST%\%CEFDIST%\lib\Win32\Release\icudtl.dat
:: copy /Y %REDIST%\d3dcompiler_43.dll                      %ROOTDIST%\%CEFDIST%\lib\Win32\Release\d3dcompiler_43.dll
copy /Y %BUILDOUT%\Release\d3dcompiler_47.dll               %ROOTDIST%\%CEFDIST%\lib\Win32\Release\d3dcompiler_47.dll
copy /Y %BUILDOUT%\Release\ffmpegsumo.dll                   %ROOTDIST%\%CEFDIST%\lib\Win32\Release\ffmpegsumo.dll
copy /Y %BUILDOUT%\Release\ffmpegsumo.dll.pdb               %ROOTDIST%\%CEFDIST%\lib\Win32\Release\ffmpegsumo.dll.pdb
copy /Y %BUILDOUT%\Release\libcef.dll                       %ROOTDIST%\%CEFDIST%\lib\Win32\Release\libcef.dll
copy /Y %BUILDOUT%\Release\libcef.dll.pdb                   %ROOTDIST%\%CEFDIST%\lib\Win32\Release\libcef.dll.pdb
copy /Y %BUILDOUT%\Release\libEGL.dll                       %ROOTDIST%\%CEFDIST%\lib\Win32\Release\libEGL.dll
copy /Y %BUILDOUT%\Release\libEGL.dll.pdb                   %ROOTDIST%\%CEFDIST%\lib\Win32\Release\libEGL.dll.pdb
copy /Y %BUILDOUT%\Release\libGLESv2.dll                    %ROOTDIST%\%CEFDIST%\lib\Win32\Release\libGLESv2.dll
copy /Y %BUILDOUT%\Release\libGLESv2.dll.pdb                %ROOTDIST%\%CEFDIST%\lib\Win32\Release\libGLESv2.dll.pdb
copy /Y %BUILDOUT%\Release\cefclient.exe                    %ROOTDIST%\%CEFDIST%\lib\Win32\Release\cefclient.exe
copy /Y %BUILDOUT%\Release\wow_helper.exe                   %ROOTDIST%\%CEFDIST%\lib\Win32\Release\wow_helper.exe
copy /Y %BUILDOUT%\Release\wow_helper.pdb                   %ROOTDIST%\%CEFDIST%\lib\Win32\Release\wow_helper.pdb
copy /Y %BUILDOUT%\Release\cef.pak                          %ROOTDIST%\%CEFDIST%\lib\Win32\Release\cef.pak
copy /Y %BUILDOUT%\Release\cef_100_percent.pak              %ROOTDIST%\%CEFDIST%\lib\Win32\Release\cef_100_percent.pak
copy /Y %BUILDOUT%\Release\cef_200_percent.pak              %ROOTDIST%\%CEFDIST%\lib\Win32\Release\cef_200_percent.pak
copy /Y %BUILDOUT%\Release\devtools_resources.pak           %ROOTDIST%\%CEFDIST%\lib\Win32\Release\devtools_resources.pak

copy /Y %REDIST%\README.redistrib.txt                       %ROOTDIST%\%CEFDIST%\README.redistrib.txt

@echo Making distribution libcef Debug,Release branch 2357 finished.
goto l_end

:l_error
@echo Invalid or missing option.
goto l_end

:l_end
F:
cd F:\dev\CEF\2357 
POPD

【讨论】:

实际上我现在可以使用使用忍者的命令提示符进行构建。但是,如果我使用 Visual Studio 构建 chromium,即使调试配置是 x64,它也会在 out/Debug 目录而不是 out/Debug_x64 中创建构建文件。而且它不会完全构建并在上述错误之间中断。 因为配置为构建 x86,而不是 x64。您可以从 VS 设置 ninja build。 你能告诉我如何从 VS 设置 ninja build 吗?这将非常有帮助。还有一件事是我可以从VS开始构建,实际上我可以调试已经运行的cef,但我想了解它开始构建时正在进行的所有进程。 @ishan jain 答案已编辑;现在包含解释和示例 bat 文件。 这为我解决了一个问题 :) 顺便问一下,Windows 上有没有现成的 chrome 二进制文件/webrtc 版本??【参考方案2】:

您运行的是 64 位 Windows 吗?这个文件听起来好像你只能在 64 位操作系统上构建 64 位。如果你是它可能仍然有帮助 - 你可以看到他们如何确定主机和目标。

https://code.google.com/p/v8/source/browse/branches/bleeding_edge/src/base/build_config.h?r=24402

【讨论】:

我已经检查了 64 位代码,现在我遇到了错误。 是的,但是您是否在尝试构建的机器上运行 64 位 Windows 操作系统?这看起来就像它在抱怨什么。 那么我想要构建 64 位 chrome 并使用 64 个窗口。我们不能这样做吗? 您是否按照此页面的说明进行操作? bitbucket.org/chromiumembedded/cef/wiki/BranchesAndBuilding 例如,这一步调用“在 Windows(任何分支)或 OS X(分支 2171 或更早版本)上执行 64 位构建时设置 GYP_DEFINES=target_arch=x64。” 是的,我按照此链接和此链接中给出的步骤进行操作。

以上是关于VISUAL C++调试时出现LNK2001 与 LNK1120错误的主要内容,如果未能解决你的问题,请参考以下文章

为啥在 Visual Studio 中编译 C++ 项目时出现致命错误“LNK1104:无法打开文件 'cryptlib.lib'?

将 DCMTK 与 Visual Studio 一起使用时出现链接器错误 LNK2019

Visual C++ 2017,外部“C”被忽略了吗?将 C++ 代码链接到 C 库时出现 LNK2019 错误

尝试使用 Visual Studio 2010 调试 dll (C++) 时出现错误消息

练习数据结构编程时出现error LNK2001错误,求助,谢谢。

Visual Studio c++ 仅在调试模式下 LNK 1104 错误