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)
请问谁能帮我解决这个问题。
使用 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++) 时出现错误消息