我有一个小程序,我想通过命令行执行它。我从IDE中运行它,它可以正常运行。我复制整个编译命令并将其粘贴到MSVS命令提示符中,然后我会得到未解析的符号链接错误(我之前在一些不需要传递链接器选项的程序上做过这样的事情)。
我从文档中读到需要指定
只是为了测试,以下是简单的程序
在IDE中,它可以正常工作。现在,我将完整的命令从MSVS 2017编译器部分复制如下:
我从文档中读到需要指定
/link linker-options
(从此处)。但是当我这样做时,我会遇到其他错误。然后按照指示我去了这里,应该告诉我如何指定链接器选项。但是它没有,它只是一个针对link.exe
的参考资料。我需要将cl
命令传输到link.exe
中吗?我需要在cl
之后执行它吗?我也找不到例子。只是为了测试,以下是简单的程序
main.cpp
:#include <iostream>
#include <Windows.h>
#include <string>
int main()
{
DWORD pid;
HWND hwnd = FindWindow(0, L"Calculator");
GetWindowThreadProcessId(hwnd, &pid);
if (hwnd) {
std::cout << "Window is open, id = " << pid;
}
else {
std::cout << "Window not found" << '\n';
}
system("Pause");
}
在IDE中,它可以正常工作。现在,我将完整的命令从MSVS 2017编译器部分复制如下:
/JMC /permissive- /we"4239" /GS /Zc:rvalueCast /W3 /Zc:wchar_t /ZI /Gm- /Od /Fd"x64\Debug\vc141.pdb" /Zc:inline /fp:precise /D "_DEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /errorReport:prompt /WX- /Zc:forScope /RTC1 /Gd /MDd /std:c++17 /FC /Fa"x64\Debug\" /EHsc /nologo /Fo"x64\Debug\" /Fp"x64\Debug\GetProcessByName.pch" /diagnostics:classic
连接器部分为:/OUT:"J:\nik\Documents\Visual_Studio_Projects\GetProcess\x64\Debug\GetProcessByName.exe" /MANIFEST /NXCOMPAT /PDB:"J:\nik\Documents\Visual_Studio_Projects\GetProcess\x64\Debug\GetProcessByName.pdb" /DYNAMICBASE "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /DEBUG /MACHINE:X64 /INCREMENTAL /PGD:"J:\nik\Documents\Visual_Studio_Projects\GetProcess\x64\Debug\GetProcessByName.pgd" /SUBSYSTEM:CONSOLE /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:"x64\Debug\GetProcessByName.exe.intermediate.manifest" /ERRORREPORT:PROMPT /NOLOGO /TLBID:1
如Mike所说,我将它们组合在一起:cl [compile-options] main.cpp /link [linker-options]
,并在main.cpp
所在的目录中执行此命令。
输出结果为:c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.1
5.26726\include\xlocale(319): warning C4530: C++ exception handler used, but unw
ind semantics are not enabled. Specify /EHsc
C:\Users\nik\documents\Visual_Studio_Projects\GetProcess\GetProcessByName\m
ain.cpp : fatal error C1083: Cannot open compiler generated file: 'x64\Debug" /E
Hsc /nologo /Fox64\Debug".asm': Invalid argument
如何正确“传递”/指定链接器选项以从命令行构建程序并运行它?
cl [compile-options] /link [linker-options]
是正确的。cl [compile-options]
后跟link [linker-options]
也可以。显然,您在获取[linker-options]
方面出现了问题,但要获得帮助,您需要编辑您的帖子以向我们展示失败的命令行及其随后的错误,逐字逐句。 - Mike Kinghan