<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>绿色记忆 &#187; Porting</title>
	<atom:link href="https://blog.gmem.cc/tag/porting/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.gmem.cc</link>
	<description></description>
	<lastBuildDate>Thu, 30 Apr 2026 03:05:57 +0000</lastBuildDate>
	<language>en-US</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.9.14</generator>
	<item>
		<title>MinGW知识集锦</title>
		<link>https://blog.gmem.cc/mingw-faq</link>
		<comments>https://blog.gmem.cc/mingw-faq#comments</comments>
		<pubDate>Wed, 15 Jun 2011 09:53:12 +0000</pubDate>
		<dc:creator><![CDATA[Alex]]></dc:creator>
				<category><![CDATA[C]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[FAQ]]></category>
		<category><![CDATA[MinGW]]></category>
		<category><![CDATA[Porting]]></category>

		<guid isPermaLink="false">http://blog.gmem.cc/?p=3526</guid>
		<description><![CDATA[<p>基础知识 MinGW、MinGW-w64的区别 前者仅仅支持32位GCC（包括Host和Target）。后者原先是MinGW的分支，现在已经独立发展，同时支持32/64bit应用的构建，同时支持更多的Windows API。 MinGW-w64同时支持构建64位应用程序，它包含了 rubenvb、mingw-builds、tdm-gcc等不同的构建版本。在安装MinGW-w64时，你需要决定32/64位、线程库、异常处理机制等选项。其中除了sjlj以外的EH，不能同时支持32/64位应用程序的构建，32/64位版本的MinGW-w64默认分别构建32/64位应用程序。 MinGW有时候被称为mingw32，而32位的MinGW-w64则可以称为MinGW-w32。 常见问题 如何挂载目录 如果遇到/mingw目录不存在之类的问题，说明文件系统挂载表没有配置好。打开 [crayon-69f50cf760326205837347-i/]，添加类似下面的文本： [crayon-69f50cf76032c784034014/] 重启MSYS命令行界面即可。  MSYS终端中文显示和输入 首先，如果使用mintty作为终端工具，进入Options ⇨ Text，把右侧窗格中的Locale和Character set设置为Default。 修改[crayon-69f50cf76032f767885390-i/] ，添加如下内容： [crayon-69f50cf760331854643479/] 修改 [crayon-69f50cf760333208948019-i/] 和[crayon-69f50cf760335055470698-i/] 中如下两行： [crayon-69f50cf760337885954336/] &#160;</p>
<p>The post <a rel="nofollow" href="https://blog.gmem.cc/mingw-faq">MinGW知识集锦</a> appeared first on <a rel="nofollow" href="https://blog.gmem.cc">绿色记忆</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="wri_content_clear_both"><div class="blog_h2"><span class="graybg">基础知识</span></div>
<div class="blog_h3"><span class="graybg">MinGW、MinGW-w64的区别</span></div>
<p>前者仅仅支持32位GCC（包括Host和Target）。后者原先是MinGW的分支，现在已经独立发展，同时支持32/64bit应用的构建，同时支持更多的Windows API。</p>
<p>MinGW-w64同时支持构建64位应用程序，它包含了 rubenvb、mingw-builds、tdm-gcc等不同的构建版本。在安装MinGW-w64时，你需要决定<span style="background-color: #c0c0c0;">32/64位、线程库、异常处理机制等选项</span>。其中除了sjlj以外的EH，不能同时支持32/64位应用程序的构建，32/64位版本的MinGW-w64默认分别构建32/64位应用程序。</p>
<p>MinGW有时候被称为mingw32，而32位的MinGW-w64则可以称为MinGW-w32。</p>
<div class="blog_h2"><span class="graybg">常见问题</span></div>
<div class="blog_h3"><span class="graybg">如何挂载目录</span></div>
<p>如果遇到/mingw目录不存在之类的问题，说明文件系统挂载表没有配置好。打开 <pre class="crayon-plain-tag">%MINGW_HOME%\msys\1.0\etc\fstab</pre>，添加类似下面的文本：</p>
<pre class="crayon-plain-tag">d:/CPP/mingw		/mingw</pre>
<p>重启MSYS命令行界面即可。 </p>
<div class="blog_h3"><span class="graybg">MSYS终端中文显示和输入</span></div>
<p>首先，如果使用mintty作为终端工具，进入Options ⇨ Text，把右侧窗格中的Locale和Character set设置为Default。</p>
<p>修改<pre class="crayon-plain-tag">%MSYS_HOME%/etc/profile</pre> ，添加如下内容：</p>
<pre class="crayon-plain-tag">alias l='ls --show-control-chars --color=auto'
alias la='ls -aF --show-control-chars --color=auto'
alias ll='ls -alF --show-control-chars --color=auto'
alias ls='ls --show-control-chars --color=auto'
export LANG=en</pre>
<p>修改 <pre class="crayon-plain-tag">%MSYS_HOME%/etc/inputrc.default</pre> 和<pre class="crayon-plain-tag">~/.inputrc</pre> 中如下两行：</p>
<pre class="crayon-plain-tag">set output-meta on
set convert-meta off</pre>
<p>&nbsp;</p>
</div><p>The post <a rel="nofollow" href="https://blog.gmem.cc/mingw-faq">MinGW知识集锦</a> appeared first on <a rel="nofollow" href="https://blog.gmem.cc">绿色记忆</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://blog.gmem.cc/mingw-faq/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cygwin知识集锦</title>
		<link>https://blog.gmem.cc/cygwin-faq</link>
		<comments>https://blog.gmem.cc/cygwin-faq#comments</comments>
		<pubDate>Tue, 13 Jul 2010 08:58:52 +0000</pubDate>
		<dc:creator><![CDATA[Alex]]></dc:creator>
				<category><![CDATA[C]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Cygwin]]></category>
		<category><![CDATA[FAQ]]></category>
		<category><![CDATA[Porting]]></category>

		<guid isPermaLink="false">http://blog.gmem.cc/?p=6657</guid>
		<description><![CDATA[<p>基本知识 Cygwin简介 Cygwin是一个用于Windows操作系统下的类Linux环境。包括以下组件： cygwin1.dll：一个提供大量POSIX系统调用功能的模拟层，位于Cygwin程序与Windows操作系统之间。目前有32/64位版本支持Windows XP3之后的所有NT系统。cygwin1.dll提供的API尽可能的遵守UNIX规范、Linux实践。与Linux不同，Cygwin使用的C标准库是newlib而不是glibc 一系列的工具集，提供类似Linux的行为，例如命令、类库等 当第一个基于Cygwin的进程创建时，cygwin1.dll被加载到其代码段，并创建共享内存区域、全局同步对象。这些区域和对象被所有Cygwin进程共享（虽然他们有各自的cygwin1.dll实例），可以用于跟踪打开的文件描述符，以及辅助fork、exec调用。每个Cygwin进程具有包含PID、UID、信号掩码的进程结构。 Cygwin与MinGW Cygwin与MinGW虽然都会被作为GNU工具链看待，但是二者在本质上是不同的。 Cygwin在某种程度上可以看作一个虚拟的操作系统层（如上所述，由cygwin1.dll驱动），在其上运行的应用程序可以使用绝大部分POSIX接口，这些程序感觉自己就在Linux上运行一样。 MinGW虽然也提供了POSIX风格的接口，但是这些接口的实现都是被对接到Win32 API上的。MinGW编译的程序是纯粹的Win32应用程序，因此也无法支持一些Linux下特有的系统调用，例如fork()。 Cygwin与虚拟机 Windows下的Linux虚拟机可以直接运行Linux应用程序，而Cygwin则不能运行，程序必须从源代码重新编译。Cygwin程序是标准的Windows PE格式。 不兼容性 由于Windows本身的限制，Cygwin无法保持POSIX兼容性，但是这样的情况比较少见。 Cygwin提供的POSIX兼容性和Windows API并非水乳交融，因此如果在应用中混用POSIX调用、Windows调用，可能导致意外结果。特别的，Cygwin信号与阻塞的Windows函数不能一起使用。 文件与权限 Cygwin同时支持POSIX、Win32风格的路径。传递给DLL的路径被转换为Win32格式；在Cygwin应用看来，文件系统是POSIX兼容的。 从1.7.0开始，/etc/fstab中包含了Windows文件系统到POSIX文件系统的映射关系。如果不进行默认设置，将进行类似这样的映射：[crayon-69f50cf76087a517057529-i/]  <a class="read-more" href="https://blog.gmem.cc/cygwin-faq">[...]</a></p>
<p>The post <a rel="nofollow" href="https://blog.gmem.cc/cygwin-faq">Cygwin知识集锦</a> appeared first on <a rel="nofollow" href="https://blog.gmem.cc">绿色记忆</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="wri_content_clear_both"><div class="blog_h2"><span class="graybg">基本知识</span></div>
<div class="blog_h3"><span class="graybg">Cygwin简介</span></div>
<p>Cygwin是一个用于Windows操作系统下的<span style="background-color: #c0c0c0;">类Linux环境</span>。包括以下组件：</p>
<ol>
<li>cygwin1.dll：一个提供大量POSIX系统调用功能的模拟层，位于Cygwin程序与Windows操作系统之间。目前有32/64位版本支持Windows XP3之后的所有NT系统。cygwin1.dll提供的API尽可能的遵守UNIX规范、Linux实践。与Linux不同，Cygwin使用的C标准库是newlib而不是glibc</li>
<li>一系列的工具集，提供类似Linux的行为，例如命令、类库等</li>
</ol>
<p>当第一个基于Cygwin的进程创建时，cygwin1.dll被加载到其代码段，并创建<span style="background-color: #c0c0c0;">共享内存区域、全局同步对象</span>。这些区域和对象被所有Cygwin进程共享（虽然他们有各自的cygwin1.dll实例），可以用于跟踪打开的文件描述符，以及辅助fork、exec调用。每个Cygwin进程具有包含PID、UID、信号掩码的进程结构。</p>
<div class="blog_h3"><span class="graybg">Cygwin与MinGW</span></div>
<p>Cygwin与MinGW虽然都会被作为GNU工具链看待，但是二者在本质上是不同的。</p>
<p>Cygwin在某种程度上可以看作一个<span style="background-color: #c0c0c0;">虚拟的操作系统层</span>（如上所述，由cygwin1.dll驱动），在其上运行的应用程序可以使用绝大部分POSIX接口，这些程序感觉自己<span style="background-color: #c0c0c0;">就在Linux上运行一样</span>。</p>
<p>MinGW虽然也提供了POSIX风格的接口，但是这些接口的实现都是<span style="background-color: #c0c0c0;">被对接到Win32 API上</span>的。MinGW编译的程序是<span style="background-color: #c0c0c0;">纯粹的</span>Win32应用程序，因此也无法支持一些Linux下特有的系统调用，例如fork()。</p>
<div class="blog_h3"><span class="graybg">Cygwin与虚拟机</span></div>
<p>Windows下的Linux虚拟机可以直接运行Linux应用程序，而Cygwin则不能运行，程序必须从源代码重新编译。Cygwin程序是标准的Windows PE格式。</p>
<div class="blog_h3"><span class="graybg">不兼容性</span></div>
<p>由于Windows本身的限制，Cygwin无法保持POSIX兼容性，但是这样的情况比较少见。</p>
<p>Cygwin提供的POSIX兼容性和Windows API并非水乳交融，因此如果在应用中<span style="background-color: #c0c0c0;">混用</span>POSIX调用、Windows调用，可能导致意外结果。特别的，Cygwin信号与阻塞的Windows函数不能一起使用。</p>
<div class="blog_h3"><span class="graybg">文件与权限</span></div>
<p><span style="background-color: #c0c0c0;">Cygwin同时支持POSIX、Win32风格的路径</span>。传递给DLL的路径被转换为Win32格式；在Cygwin应用看来，文件系统是POSIX兼容的。</p>
<p>从1.7.0开始，/etc/fstab中包含了Windows文件系统到POSIX文件系统的映射关系。如果不进行默认设置，将进行类似这样的映射：<pre class="crayon-plain-tag">C:\Windows -&gt; /cygdrive/c/Windows</pre>   </p>
<p>Windows NT包含了一个基于ACL的安全模型。在支持此ACL的文件系统（NTFS）上，Cygwin将Win32文件所有权、权限映射到ACL。chmod调用将<span style="background-color: #c0c0c0;">UNIX文件权限映射到Win32等价的权限</span>上。</p>
<p>具有管理员权限的用户可以chown文件所有者。</p>
<p>Cygwin 1.1.3引入了设置Real UID、Effective UID的机制。</p>
<div class="blog_h3"><span class="graybg">进程创建</span></div>
<p>Cygwin中的fork调用没有很好的映射到Win32 API上。fork()调用本身的语义要求父子进程的地址空间布局完全一致，而Windows本身没有提供在进程间拷贝地址空间的机制，此外Windows下的一些特性可能破坏fork()实现的可靠性，这导致了一些流行问题：</p>
<ol>
<li>DLL基址冲突：与类UNIX系统使用“位置无关代码”的共享库不同，Windows共享库假设了一个固定的基址。一旦同一个进程加载的两个DLL的基址冲突了，Windows就要将其中一个“rebase”到不同的地址上，这种rebase行为具有不一致性：可能每次rebase的DLL不同，移动到的目的位置也不同。Cygwin可以为动态加载的DLL补充前述的不一致性。但是对于静态链接的DLL（statically-linked）之间的冲突，是在cygwin.dll加载之前就被Windows处理的，Cygwin无能为力，只能通过<span style="background-color: #c0c0c0;">rebaseall</span>工具处理</li>
<li>Windows Vista开始引入的地址空间布局随机化（ASLR），允许线程栈、堆、内存映射文件、静态链接DLL随机的定位到进程的地址空间。此行为会干涉fork()的正常行为。如果不可移动对象（进程堆、系统DLL）被定位在错误的位置，Cygwin无法进行补偿行为</li>
</ol>
<p>总之，现有的Windows实现导致无法实现完全可靠的fork()，偶发性的fork()失败不可避免。</p>
<div class="blog_h3"><span class="graybg">信号</span></div>
<p>当Cygwin进程启动后，会有一个辅助线程被用于信号的处理，该线程等待Windows事件，并将其转换为信号，当进程收到信号后，会根据信号bitmask的设置进行合适的处理。大部分的UNIX信号被支持。</p>
<div class="blog_h3"><span class="graybg">套接字</span></div>
<p>在Cygwin中与Socket相关的调用基本上是调用了Winsock的对应物——MS的Berkeley Socket实现，但是使用了一些技巧。例如，为了允许POSIX信号来中断阻塞调用，所有的Socket调用在底层都是非阻塞的。</p>
<p>由于地址族AF_UNIX在Winsock下不可用，Cygwin利用本地AF_INET代替之，但是这对程序是透明的。</p>
<div class="blog_h3"><span class="graybg">select</span></div>
<p>UNIX的select()函数也不能清晰的映射到Win32 API。在Windows下，select()只能用于套接字的处理，而UNIX下可以用于各种类型的文件描述符。</p>
<div class="blog_h2"><span class="graybg">安装与配置</span></div>
<p>下载<a href="https://www.cygwin.com/setup-x86.exe" target="_blank">setup-x86.exe</a>到安装目录，例如D:\CPP\tools\Cygwin，双击即可安装，设置好安装目录、下载目录后，选择163的镜像即可安装。Cygwin会显示已经port的软件包的列表，根据需要安装即可。</p>
<p>如果想安装基于AMD64的cygwin，可以下载setup-x86_64.exe，但是64位的Cygwin中，类库和工具没有32位的全面。</p>
<div class="blog_h3"><span class="graybg">常用的软件包</span></div>
<table style="width: 100%;" border="1" cellspacing="0" cellpadding="5">
<thead>
<tr>
<td style="width: 150px; text-align: center;">软件包 </td>
<td style="text-align: center;">说明 </td>
</tr>
</thead>
<tbody>
<tr>
<td>apt-cyg</td>
<td>安装此软件后，不需要每次都打开setup-x86.exe进行软件安装，只需要使用类似于apt-get方式即可安装：<br />
<pre class="crayon-plain-tag">wget http://apt-cyg.googlecode.com/svn/trunk/apt-cyg 
chmod +x apt-cyg mv apt-cyg /usr/local/bin/ 
#切换源 
apt-cyg update -m http://mirrors.163.com/cygwin</pre></p>
<p>注：目前Cygwin已经修改了散列算法，对于apt-cyg 0.95，应该修改343行的md5sum为sha512sum</p>
</td>
</tr>
<tr>
<td>ncurses </td>
<td>与Terminal使用相关的小工具，例如clear命令</td>
</tr>
<tr>
<td>cygserver</td>
<td>该工具自动安装，需要运行 /usr/bin/cygserver-config进行必要的配置。cygserver用于支持以“服务”默认来运行Cygwin应用程序。配置步骤如下：<br />
<pre class="crayon-plain-tag">#下载需要的软件
apt-cyg install cygrunsrv
#只需配置，会依次提示：
#... /etc/cygserver.conf file?  yes
#install cygserver as service?  yes
/usr/bin/cygserver-config</pre></p>
<p>完毕后，在Windows系统服务中可以看到一个“CYGWIN cygserver”，启动即可。</p>
</td>
</tr>
<tr>
<td>Devel目录</td>
<td>开发人员必备的软件包都在该目录下，对于C/C++开发，需要AutoTools（autoconf、automake）、binutils、cmake、cygwin-devl、gcc-core、gcc-g++、gdb、libtool、make</td>
</tr>
<tr>
<td>Cygwin/X</td>
<td>在Cygwin下运行基于X Windows的GUI应用，例如gedit，需要用到，安装步骤：<br />
<pre class="crayon-plain-tag">apt-cyg install xorg-server xinit xorg-docs X-start-menu-icons
#通过下面的命令可以在多窗口模式下启动一个X server，并且附加一个X terminal
/usr/bin/startxwin
#可以安装桌面管理器，例如：
apt-cyg install mate-session-manager
#安装完上面的MATE后，会发现字体渲染的比较粗糙，可以选用Apple LiHei、XCross_Mono.Clear分别
#作为一般字体、等宽字体（字体文件存至~/.fonts），并通过
#System - Preferences - Appearance -fonts 设置渲染方式为Subpixel Smoothing</pre>
</td>
</tr>
<tr>
<td>OpenSSH</td>
<td>安装头SSH服务要求cygserver被安装。步骤如下：<br />
<pre class="crayon-plain-tag">apt-cyg install openssl openssh
ssh-host-config
#根据提示进行操作：
#if privilege separation should be used 选择no
#if sshd should be installed as a service 选择yes
#其余选择no
#完毕后，会多出一个NT服务，可以按如下方式启动之：
#net start "CYGWIN sshd"
#或者：
#cygrunsrv --start sshd</pre></p>
<p> 默认的用户密码就是当前Windows的用户密码</p>
</td>
</tr>
<tr>
<td>输入法</td>
<td>
<p>在Cygwin/X下使用输入法，推荐ibus-pinyin，需要安装的包包括：ibus、ibus-pinyin、dconf（不安装的话配置无法生效）。</p>
<p>安装完毕后，设置ibus为自动启动（以MATE为例：System - Perferences - Startup Applications 添加“/usr/bin/ibus-daemon -d”）</p>
</td>
</tr>
</tbody>
</table>
<div class="blog_h2"><span class="graybg">Cygwin下的编程</span></div>
<p>在Cygwin下使用gcc，与在Linux下的用法一样，下面是编译、运行HelloWorld的例子：</p>
<pre class="crayon-plain-tag">gcc hello.c -o hello.exe  #注意后缀
hello.exe
#打印：Hello, World</pre>
<div class="blog_h3"><span class="graybg">构建64位应用程序</span></div>
<p>64位的Cygwin工具链默认使用微软x64调用协定。可以使用32位的Cygwin工具链、Win32 API来构建应用程序。</p>
<p>有一点需要注意的，<span style="background-color: #c0c0c0;">64位Cygwin使用了和Windows、MinGW编译器不同的数据模型</span>。后两者使用LLP64模型，而Cygwin使用与Linux一致的LP64模型。这两个模型一个重要区别是，前者的<pre class="crayon-plain-tag">sizeof(long) == 4</pre> 而后者的<pre class="crayon-plain-tag">sizeof(long) == 8</pre> （与指针类型、size_t、ssize_t长度一致），该区别会对包括<span style="background-color: #c0c0c0;">LONG, ULONG, DWORD</span>在内的Win32类型用法产生影响。你不能假设DWORD与ssize_t的长度是一致的4字节整数。</p>
<div class="blog_h3"><span class="graybg">构建GUI应用</span></div>
<p>Cygwin内置了X Server，因此可以把GUI英语编译为X applications。此外Cygwin允许你<span style="background-color: #c0c0c0;">完整的使用Windows的GUI函数</span>。构建GUI应用与命令行应用没有什么区别，只需要添加一个选项：<pre class="crayon-plain-tag">gcc -mwindows</pre> 。</p>
<div class="blog_h3"><span class="graybg">构建和使用DLL</span></div>
<p>DLL即动态链接库，其代码在运行期间动态的链接到应用程序，而不是在编译期间就静态的链接。DLL包括三个组成部分：</p>
<ol>
<li>导出（exports ）：包含了DLL允许外部访问的函数、变量的列表，其他部分对外隐藏</li>
<li>数据和代码：是DLL作者编写的部分，包括函数、变量，被合并为一整个的目标文件</li>
<li>导入库（import library）：形式上与UNIX常规的*.a库一样，但是其中仅仅包含了很少的信息，用于告知OS，你的应用程序如何去“导入”DLL，该文件被链接到应用程序</li>
</ol>
<p>基于最新版本的gcc和binutils，构建一个DLL的过程相当简单，下面是一个例子：</p>
<pre class="crayon-plain-tag">#include 

int hello()
{
    printf("Hello World!\n");
}</pre>
<div>首先编译出目标代码（Object code）：<pre class="crayon-plain-tag">gcc -c hello.c</pre> </div>
<div>然后，告诉gcc你希望构建一个共享库：<pre class="crayon-plain-tag">gcc -shared -o hello.dll hello.o</pre> </div>
<div>要使用这个共享库，只需要在你的代码中直接调用hello()，并使用类似下面的命令链接： <pre class="crayon-plain-tag">gcc -o SayHello SayHello.c -L./ -lhello</pre> </div>
<p> 实际应用中，你可能需要更复杂的命令来构建DLL，例如：</p>
<pre class="crayon-plain-tag">#共享库的名字为module，前缀cyg用来将其与Native的Windows DLL区分
gcc -shared -o cyg${module}.dll 
#libmodule.dll.a为用于导入的库stub
  -Wl,--out-implib=lib${module}.dll.a
#导出所有变量、函数
  -Wl,--export-all-symbols
  -Wl,--enable-auto-import
#需要整个捆绑到DLL中的目标文件、静态库
  -Wl,--whole-archive ${old_libs}
#该DLL需要与之链接的DLL的导入库
  -Wl,--no-whole-archive ${dependency_libs}</pre>
<div class="blog_h3"><span class="graybg">使用已有的DLL</span></div>
<p>如果要在Cygwin中使用已有的DLL，则需要生成Cygwin兼容的导入库，下面是一个示例：</p>
<pre class="crayon-plain-tag">echo EXPORTS &gt; hello.def
#列出DLL中的符号，将其输出到文件
nm foo.dll | grep ' T _' | sed 's/.* T _//' &gt;&gt; hello.def
#生成导入库
dlltool --def hello.def --dllname hello.dll --output-lib hello.a</pre>
<div class="blog_h2"><span class="graybg">常见问题</span></div>
<div class="blog_h3"><span class="graybg">Eclipse CDT无法识别工具链：Toolchain "Cygwin GCC" is not detected</span></div>
<p>可能是环境变量配置错误，必须在PATH中包含<pre class="crayon-plain-tag">%CYGWIN_HOME%\bin</pre> Eclipse CDT才能识别成功。</p>
</div><p>The post <a rel="nofollow" href="https://blog.gmem.cc/cygwin-faq">Cygwin知识集锦</a> appeared first on <a rel="nofollow" href="https://blog.gmem.cc">绿色记忆</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://blog.gmem.cc/cygwin-faq/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
