- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 MSYS2 ( msys2-base-i686-20160205.tar.xz
) 在 XP 上编译一个项目。包含的文件之一如下:
/z/path/to/libA/Include/A/B/String.h
反过来,该文件在第 34 行执行:
#include <string.h>
这个文件已经存在,例如:
Z:/msys32/mingw32/i686-w64-mingw32/include/string.h
... Z: 驱动器也是我的代码所在的位置。在我的 g++
编译行,我有 -I Z:/msys32/mingw32/i686-w64-mingw32/include
首先,在大量包含之后,-I /z/path/to/libA/Include/A/B
.但是,当我尝试编译时,编译失败,与String.h
有关.
因此,我通过添加 -v -E
进行了一些检查(“在预处理阶段后停止”)并更改为 -o File.e
在 g++
命令行,并可以在生成的 File.e
中看到这一点:
...
# 34 "Z:/path/to/libA/Include/A/B/String.h" 2
# 1 "Z:/path/to/libA/Include/A/B/string.h" 1
# 35 "Z:/path/to/libA/Include/A/B/String.h" 2
...
据我了解,预处理器来到 Z:/path/to/libA/Include/A/B/String.h
的第 34 行, 看到 #include <string.h>
, 开始寻找 string.h
在当前目录 - 并找到它,即使它不存在于这样的名称下!?事实上,如果我从 MSYS2 bash
外壳:
$ find Z:/path/to/libA/Include/A/B/ -name 'string.h'
... 没有返回任何内容(虽然找到了大写的 String.h
);但是,如果我强制使用非大写或大写名称的列表:
$ ls -la Z:/path/to/libA/Include/A/B/String.h
-rw-r--r-- 1 User None 2885 May 31 09:45 Z:/path/to/libA/Include/A/B/String.h
$ ls -la Z:/path/to/libA/Include/A/B/string.h
-rw-r--r-- 1 User None 2885 May 31 09:45 Z:/path/to/libA/Include/A/B/string.h
...然后它们都被报告为存在?!
我猜这就是“混淆”的原因 g++
,从某种意义上说,它被阻止寻找 string.h
(小写字母)在其他地方/在系统路径中。从那以后,我找到了 Git-windows case sensitive file names not handled properly和:
While NTFS (and some remote filesystems) support case-sensitivity, the NT kernel starting with Windows XP does not support it by default. Rather, you have to tweak a registry setting and reboot. For that reason, case-sensitivity can not be supported by Cygwin, unless you change that registry value.
If you really want case-sensitivity in Cygwin, you can switch it on by setting the registry value
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\obcaseinsensitive
to 0 and reboot the machine.
...我这样做了,但我仍然遇到同样的问题;不确定这是否是因为我在 MSYS2(不是 Cygwin)上使用 MINGW;或者因为像 Enable case sensitive behavior with Windows XP and Interix Subsystem or SFU 这样的资源引用HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Kernel\ObCaseInsensitive
(注意,大写);但是,我已经有了这些 key (我只是将其设置为 0,然后重新启动),并且它们带有微小的字母,就像在 cygwin.com 链接中一样。此外,重启后进行测试,这也没有帮助。
同时 How can I make MinGW case-sensitive for included header file names表示这可能无法解决 - 我能做些什么来解决这个问题,并说服 g++
阅读string.h
从系统位置?我已经尝试在不同的机器上构建相同的库,Windows 7 或 8 远程桌面,使用相同的 MingW 版本 - 所以应该可以做一些事情......
最佳答案
添加-I Z:/msys32/mingw32/i686-w64-mingw32/include
到命令行的开头不起作用,因为该目录已经在 GCC 的系统包含目录列表中。我不确定为什么,但这是 GCC 记录的行为。
最好的解决方案是重命名该库中的头文件,并重命名所有尝试使用它的包含。或者,使用 -I /z/path/to/libA/Include/
连同 #include <A/B/String.h>
. #include
中的文件夹名称指令将确保包含库 header 而不是系统 header 。
关于c++ - MSYS2 区分大小写并包含在 XP 上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37662307/
我想从 vanilla MSYS 环境下载一个脚本。 在 Linux 上,我会做 wget 在 Mac OS X 上,我会做 curl -O 不幸的是,在 MSYS 的默认安装中,这些替代方案似乎
当我使用 MSYS 编译某些东西时,./configure步骤可能需要比 make 更长的时间.但是,Linux 中的同一进程具有快速配置和慢速生成。这只是 MSYS 中的一些设置,它使我的系统陷入困
我一直在四处寻找,但找不到这 3 个版本的 MSYS 的完整描述。 (完全有可能我只是不知道要寻找什么。)我确实知道 MSYS 是支持使用 MinGW 进行开发的 Linux 工具的最小端口,但我不清
我需要将/DEF:c:\filepath\myLib.def"命令行选项从 bash 脚本传递到 MS 编译器/链接器。该路径是由 bash 脚本作为构建过程的一部分生成的。基本上,参数我的脚本通过的
我有一个 MSYS 安装,我正在编写一个 bash 脚本来设置一些文件。我想从 MSYS 中的 bash 脚本创建一个目录符号链接(symbolic link),但为此我需要使用 mklink/D,这
我计划将我的项目迁移到 git,我目前想知道哪个是 Windows 下最好和/或最稳定的选择。 据我所知,我基本上有 2.5 个选项: MSYSgit git 在 Cygwin 下 (又名 2.5)来
为什么我在 MSYS 中得到这个? 用户@lappy1 ~ $ mkdir 测试 sh: mkdir: 命令未找到 像 cd 和 pwd 这样的基本命令工作得很好。 mkdir 怎么了? 最佳答案 看
请告诉我一个可用于更改文件属性的 MSYS shell 命令。当我运行 ls -l 命令时,我得到以下结果: -rw-r--r-- 1 lenovo Admin .....m4sugar.m4 我想提
我通过 pacman 安装了 cmake 3.2.3。当我尝试从 msys64 shell 中使用它时出现错误: $ cmake -G "MSYS Makefiles" .. CMake Error:
这将是今天最棘手的问题。如何在 MSYS shell 中浏览我的 Windows 文件夹结构?当我启动 shell 时,我看到的只是一个“~”。我输入“ls”,文件夹是空的。我只想知道如何进入我的 C
我在 Windows 下运行 MSYS,虽然它可以工作,但我想知道是否有 MSYS 脚本文件之类的东西。 例如,要在 C 中编译 GTK 程序,我需要键入:gcc source.c -o execut
如果我只安装了“date”命令,我该如何更改 MSYS+MinGW for Windows 的时区?这里没有“tzconfig”或“tzselect”。 当我尝试 $date --set="Apr 0
MSYS 正在向终端打印一些奇怪的字符(空格、空值等)。使我的单元测试结果有点神秘。关于如何解决这个问题的任何想法?我正在研究是否可能将其通过管道传输到将清理输出的脚本。 $ bundle exec
我正在使用 msys-git 并注意到在执行 git pull 后我经常在输出中得到奇怪的字符。我认为这些是某些终端可能理解的某种控制字符,但在标准的 Windows 命令提示符下它们会导致: So
我正在尝试使用 git 来更有效地管理使用 CVS 进行源代码控制的项目,但我遇到了问题 add -ing 一个确实有很长路径的文件 - 276 个字符。 不幸的是,这个文件是由我使用的工具随附的自定
我希望我的 makefile 输出能够进行颜色编码。 但是我无法让 ANSI 颜色代码在此终端上工作。不过,这应该是可能的,ls --color 为我提供了彩色输出,并且我的 shell 提示符也是彩
我一直在尝试从 Windows 机器上的 msys 中的 bash 脚本运行一些 java 程序。具体来说,我在命令行上使用 WEKA 自动执行一些任务。我有一些问题,其中引用的字符串未正确传递给 j
我有一个构建 libcurl 静态库以在我的项目中使用的 makefile(在 Linux 上完美运行)。 我正在尝试使用 MSYS 在 Windows 7 上构建 libcurl,但我正在努力。 在
我在 Windows 中使用 MSYS。我需要访问 MSYS home 文件夹中的文件。 MSYS的/home/username文件夹在Windows C:\文件夹中映射到哪里? 最佳答案 C:\Mi
我正在使用 Mingw 构建一个 C/C++ 项目。这个项目的 makefile 超出了我的理解范围,并且依赖于自定义且相当复杂的工具链来编译它。在 Windows 上使用 GNU 工具非常方便,尤其
我是一名优秀的程序员,十分优秀!