- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个小程序,我想通过命令行执行。我从 IDE 内部运行它并且运行良好。我复制了整个编译命令并将其粘贴到 MSVS 命令提示符上,但出现了 Unresolved 符号链接(symbolic link)器错误(我之前在一些不需要传递链接器选项的程序上这样做过)。
我从文档中了解到我需要指定 /link linker-options
(来自 here)。但是当我这样做时,我会遇到其他错误。然后按照指示我去了here ,这应该说明我应该如何指定链接器选项。但它不是,它只是对 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): 警告 C4530: 使用了 C++ 异常处理程序,但 unw
ind 语义未启用。指定/EHsc
C:\Users\nik\documents\Visual_Studio_Projects\GetProcess\GetProcessByName\m
ain.cpp: fatal error C1083:无法打开编译器生成的文件:'x64\Debug"/E
Hsc/nologo/Fox64\Debug".asm': 无效参数
我如何正确地“传递”/指定链接器选项以从命令行构建程序并运行它?
最佳答案
您看到的错误是编译选项中的 shell 解析错误。因此,该命令并没有达到实际编译的程度,更不用说链接了,如果您的链接选项实际上会引起任何问题,问题也不会向我们展示它们是什么。
我们看到的解析错误是由选项引起的:
/Fa"x64\Debug\"
documentation of /Fa
规定当表格:
/Fa directory\
用于指定程序集列表的输出目录,尾随\
必须存在以区分这种形式的选项:
/Fa filename
您已经做到了,并且将目录名称放在引号中 - "x64\Debug\"
。
当您使用 Windows shell (cmd
) 执行命令时解析一个命令行,它把引号 "..."
中的 \
当作一个 escape 字符。
因此尾随 \
转义 "x64\Debug\"
的结束 "
和 目录\
/Fa
的参数通过命令的后续选项继续,直到最后,编译器识别出以下形式:
/Fa filename
并尝试打开名为:
的程序集列表,但未成功'x64\Debug" /E Hsc /nologo /Fox64\Debug".asm'
您可以通过以下任何一种方式避免此解析错误:
转义引用路径名中的反斜杠
改变:
/Fa"x64\Debug\"
到:
/Fa"x64\\Debug\\"
对于命令行选项中的其他路径名也是如此。
去掉引号
改变:
/Fa"x64\Debug\"
到:
/Fax64\Debug\
仅当路径名中有嵌入空格时才需要引号路径名,以便 shell 将解析单个字符串而不是两个或多个。您的任何路径名中都没有嵌入空格命令行选项,因此您可以从所有选项中删除引号。
使用/
代替\
作为路径名分隔符
改变:
/Fa"x64\Debug\"
到:
/Fa"x64/Debug/"
对于命令行中的其他路径名也是如此。 window 是唯一操作系统使用 \
作为路径名分隔符。别人用/
,Windows有在最近的版本中都接受了。
如果这导致任何视觉混淆/
用作路径分隔符 ("x64/Debug/"
) 和 /
用作选项前缀 (/Fa
),cl
还允许您使用 unix 风格的选项,例如-Fa
而不是 /Fa
。
当然你也可以去掉引号和使用/
作为路径分隔符。
如果您使用这些解决方案之一仅来修复以下中的解析错误:
/Fa"x64\Debug\"
随后的选项将引发相同的解析错误:
/Fo"x64\Debug\"
因此,将所选解决方案始终如一地应用于整个命令行。
关于windows - 如何通过 MSVS 2017 x64 命令行将链接器选项传递给 `cl`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52708929/
我知道这个问题已经被问过多次了。我已经在 stackover flow 上浏览了很多票,但我似乎找不到任何我能清楚理解的东西。我已经能够让 Admob 横幅出现在我的应用程序中,但我无法弄清楚如何将它
使用 miranda 进行编码时遇到问题,我只是函数式编程的新手,所以如果我不犯容易的错误,请狠狠地打我一巴掌,这样我就学会了 无论如何,我在第 12 行遇到错误,因为 unifyin char wi
例如,我有一个DataFrame A如下 A 0 1 2 现在我想将 DataFrame B 中的每 2 行插入到 A 中,每 1 行插入一次,B 如下 B 3 3 4 4 5 5 终于要了 A 0
我正在寻找一个针对 MSBuild.exe 运行的命令,该命令仅采用 MVC 4 项目并将其发布到给定目录。 例如, MSBuild /.csproj -publish -output=c:/fold
我的 SQL 行有问题,当使用 å ø æ 时,它们会被插入为 ø æ å,看起来不错,但是当我在页面上回显该行时,我得到一个 �。 如果我使用其他排序规则,我会得到一个“?”而不是 � 最佳答案 您
我是一名优秀的程序员,十分优秀!