- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我一直在为我们的软件堆栈开发跨平台构建系统。具体来说,我正在研究构建系统的 Windows 组件。
我们有许多项目,每个项目都有一个手工编码的 .vcxproj。有些项目相互依赖,有些则依赖于 Qt。
我的 .vcxproj 文件在我迄今为止尝试过的五个项目中的三个上运行良好,但在另外两个上以一种非常有趣的方式失败了:
project\dir> msbuild /p:Configuration=Release /p:PropertyA=C:\path\to\project\root\ /p:Platform=x64 obj\project.vcxproj
Microsoft (R) Build Engine version 4.0.30319.17929
[Microsoft .NET Framework, version 4.0.30319.18047]
Copyright (C) Microsoft Corporation. All rights reserved.
Build started 16.07.2013 11:13:43.
Project "C:\path\to\project\root\obj\project.vcxproj" on node 1 (default targets).
PrepareForBuild:
Creating directory "C:\path\to\project\root\obj\x64_Int\Release_DLL_Int\".
InitializeBuildStatus:
Creating "C:\path\to\project\root\obj\x64_Int\Release_DLL_Int\project.unsuccessfulbuild" because "AlwaysCreate" was specified.
ClCompile:
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\AMD64\CL.exe /c /I"include path A" /I"include path B" /Zi /nologo /W3 /WX- /sdl /O2 /Oi /D NDEBUG /D _CRT_SECURE_NO_WARNINGS /D QT_CORE_LIB /D _WINDLL /D _MBCS /Gm- /EHsc /MD /GS /Gy /fp:precise /Zc:wchar_t /Zc:forScope /Fo"C:\path\to\project\root\obj\x64_Int\Release_DLL_Int\\" /Fd"C:\path\to\project\root\obj\x64\\project.pdb" /Gd /TP /errorReport:queue
/nologo
src\main\cpp\source_a.cpp src\main\cpp\source_b.cpp src\main\cpp\source_c.cpp ...
????????????????????????????????????
c1xx : fatal error C1083: Cannot open source file: '????????????????????????????????????': No such file or directory [C:\path\to\project\root\obj\project.vcxproj]
????????????????????????????????
c1xx : fatal error C1083: Cannot open source file: '????????????????????????????????': No such file or directory [C:\path\to\project\root\obj\project.vcxproj]
...
对于每个源文件,使用其中一串问号,源文件路径中每个字符一个问号。
那是在命令行上,但如果我在 Visual Studio (2012) 中打开项目,我可以看到字符的真实含义:
error C1083: Cannot open source file: '猀爀挀尀洀愀椀渀尀挀瀀瀀尀...⸀挀瀀瀀': No such file or directory
error C1083: Cannot open source file: '猀爀挀尀洀愀椀渀尀挀瀀瀀尀...⸀挀瀀瀀': No such file or directory
...
(抱歉,我省略了真实的文件名。)
文件名中的每个字符都已 [一致] 替换为中文字符。这是一个 1:1 的替换,在罗马和中文字符之间具有一致的关系,即 \
-> 尀
和 cpp
-> 挀瀀瀀
.
我运行 msbuild 时诊断冗长,在 12000 多行输出中,在这些错误消息之前没有一个中文字符——它在失败之前多次正确列出了源文件。
通过历史悠久的调试技术“随机注释”,我发现如果我手动编辑以某些方式失败的 vcxproj 文件,问题就会消失,但链接会失败,因为我已经注释掉了库路径或源文件。
在这两个失败的项目中,删除 4-6 个源文件(随机地,尽管注释掉相同的四个文件总是有效或无效是一致的)将修复它。在依赖Qt的那个,去掉$(QT5DIR)/include/QtCore的路径会解决这个问题,但是链接失败,因为找不到Qt。
源文件都是 ASCII 编码的,在删除后修复问题的文件中似乎没有任何一致的格式。
我已经在三台不同的计算机、两台 Windows 7 计算机和一台 8.1 预览版上尝试过此操作。它在 8.1 上工作正常,但在两台 Win 7 机器上都失败了。
它似乎与项目中的文件数量无关,因为其中一个工作的项目比任何一个非工作项目的文件都多得多。
这似乎不是依赖性问题,因为只有一个非工作类依赖于 Qt,并且工作类和非工作类之间的共性似乎排除了项目间依赖性。
我意识到这已经很明显了,任何 Microsoft 专家都知道发生了什么事吗?
问题 1:我做错了什么?什么可能导致这种行为?
问题 2:关于我可以做些什么来继续追踪问题有什么想法吗?
更新:
最佳答案
我猜是文本格式错误。反斜杠的值为 U+005C,它被转换成的字符的值为 U+5C00(根据 http://www.scarfboy.com/coding/unicode-tool?s=U%2B5C00 )。同样的问题也适用于 cpp 中的“c”,我相信“p”也是如此。
我不太熟悉 MSVC 支持的文本编码,但我会先查看编码并确保它们完全相同,然后再查看任何可能错误转换文件的内容,比如一个程序认为它在 ANSI 文件而不是扩展编码上运行。您可能会丢失一个字节,或者您的宽字符的字节顺序可能会被翻转。
关于c++ - 对于某些生成的项目,msbuild 将文件名解释为中文字符,而不是其他项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17682278/
我在一个项目中工作,该项目需要 SQL 结果的最佳性能,并且希望优化查询,但经过反复试验后,我在 IN 方面遇到了一些问题。 -- THIS RETURNS NO RESULTS AT ALL. SE
在尝试创建一个实际上非常简单的 SQL 语句时,我发现自己迷失了方向。 我有一个包含 3 个表的数据库: 食谱 - 存储一些用于 cooking 的食谱名称 配料食谱 - 将配料与食谱链接 成分 -
我正在尝试理解 PHP 中的 Hebrev 函数。 https://php.net/manual/en/function.hebrevc.php 它说:“将逻辑希伯来语文本转换为视觉文本”。但我不明白
嗨,我在 Grid view 的 android 文档中发现了一段代码对于以下代码。 gridview.setOnItemClickListener(new OnItemClickListener()
谁能解释一下 InfiniBand 是什么?与以太网相比的主要区别是什么,这些差异如何使其比以太网更快? 在官方description从 mellanox 写到 Introduce InfiniBan
这个问题已经有答案了: How are java increment statements evaluated in complex expressions (1 个回答) 已关闭 8 年前。 我知道
我正在阅读 MySQL 教程,我遇到了这个: SELECT /*! SQL_NO_CACHE */ user FROM users; 为什么优化提示 SQL_NO_CACHE 包含在: /*!
我无法理解$(this),我做了一个剪刀石头布的版本,并应用了 jQuery 让用户在计算机上选择按钮选项。我希望有人能解释一下 $(this) 指的是什么,它是 btn-primary 吗?该函数在
我不是很确定 while(choice == 1 || choice ==2);谁能解释一下。我明白这一点 if(choice ==1) displayMonthly(rainfall); e
let flyRight = CABasicAnimation(keyPath: "position.x") flyRight.toValue = view.bounds.size.width/2 f
目录 解释:int型默认值为0 但我们尝试发现并不能通过: 原因: int的默认值为0,而Integer的默认值为null
我正在处理一个查询,自从一个 SSRS 服务器传输到另一个服务器后,它似乎没有按预期执行,并且 where 语句的一部分中出现了以下行 找出不同之处,或者至少从我能找到的地方来看。 where COA
我正在制作一个退回检测程序,读取退回邮件。我们的设置是发送电子邮件,在发送的邮件中添加一个 noreply@domain.tl。一些收件人不再存在,因此我们想要读取退回邮件,并检测它发送给谁。我已经崩
我有一个关于公式通过控制点弯曲的问题。 如您所知,HTML Canvas 有 quadraticCurveTo(x1, y1, x2, y2)与 x1 and x2作为控制点。 但是,当您尝试使用它绘
我有一个 Emakefile看起来像: %% -- %% %% -- {'/Users/user/projects/custom_test/trunk/*', [debug_info, {out
我有一个非常简单的问题。这不仅适用于 spray-json,而且我已经阅读了 argonaut 和 circe 的类似声明。所以请赐教。 在 spray-json 中,我遇到了 There is no
我正在为视频添加水印。我试图让水印与视频尺寸成比例。我已经使用 scale2ref 看到了十几个不同的答案,但没有解释实际发生了什么,所以我发现很难知道如何实现/更改配置以适应我的情况。 当前覆盖命令
因为我正在学习语言,所以我在玩 Haskell,我只是发现了一些我不理解的东西,我找不到解释。如果我尝试运行此代码: map (`div` 0) [1,2,3,4] 我得到一个除以 0 的异常,这是预
我正在寻找解决错误对象引用未设置到对象实例的步骤/指南。以及问题发生原因的解释。 我正在寻找更一般的解释,所以如果我收到错误,我应该采取什么步骤来查找问题。我经常看到有人提供特定代码段的帖子,而其他人
我最近想升级我的知识React ,所以我从组件生命周期方法开始。让我好奇的第一件事是这个componentWillReceiveProps .所以,文档说当组件接收新的(不一定是更新的) Prop 时
我是一名优秀的程序员,十分优秀!