如何在Windows 7中使用Cygwin创建符号链接

33

最近,我尝试使用C/C++编写Android应用程序的本地代码。问题出在使用Android NDK时制作符号链接时。通过一些搜索,有人建议使用Cygwin。我现在已经安装了它。如何在Windows 7中使用Cygwin创建符号链接?


2
可能是 https://dev59.com/22Ml5IYBdhLWcg3wJUAC 的重复问题。 - PJTraill
@PJTraill,这个问题可能是关于Cygwin中的符号链接,而不是关于Windows本地符号链接的。 - Victor Yarema
4个回答

55

简而言之,定义以下环境变量:

CYGWIN=winsymlinks:nativestrict
根据Cygwin文档
如果设置为winsymlinks:nativewinsymlinks:nativestrict,在支持它们的文件系统和操作系统版本上,Cygwin会将符号链接创建为本机Windows符号链接。 winsymlinks:nativewinsymlinks:nativestrict之间的区别在于:如果文件系统支持本机符号链接并且由于某些原因Cygwin无法创建本机符号链接,则使用winsymlinks:native会回退到创建Cygwin默认符号链接;而使用winsymlinks:nativestrict则会立即失败symlink(2)系统调用。
您还应确保以提升的权限运行Cygwin(右键单击快捷方式并选择“以管理员身份运行”,或设置mintty快捷方式属性,高级→以管理员身份运行)。
其他细节请参见另一个答案

2
在Windows 8中,$ export CYGWIN="winsymlinks:nativestrict" 对我起了作用。 - aqavi_paracha
1
我认为你最好参考一下你自己在 https://dev59.com/22Ml5IYBdhLWcg3wJUAC 上的问题和答案! - PJTraill
3
使用CYGWIN=winsymlinks:native对于许多不同的工作流程都是错误的。如果您可以接受“回退到创建Cygwin默认符号链接”,那么为什么要首先尝试使用本机呢? 如果有人需要“本机”,那么...他们就需要“本机”。唯一正确的选项是“CYGWIN=winsymlinks:nativestrict”! - Victor Yarema

9
我第二天就收到了!所以,不要像我这样(Cygwin新手)错误地认为自己无知,现在我来回答。

使用通常的命令可以轻松为Windows 7创建符号链接:

ln -s

答案是设置Cygwin并安装所需包,如make等。

请清楚阅读要求:Android NDK


12
语法:ln -s 目标文件 新文件该命令用于创建一个符号链接,将目标文件链接到新文件。这个新文件可以被认为是指向源文件的快捷方式,也就是说,当你打开新文件时,实际上是打开了目标文件。其中 -s 参数表示创建软链接。 - Abdull
请看olibre的回答:ln -s 的默认行为似乎是创建文本文件。 - PJTraill
链接现在重定向了。这是预期的位置吗? - Peter Mortensen

0

您可以在以下网址找到脚本以使事情变得更加容易:https://akudo.codes/2018/12/10/mklink-command-in-windows-ubuntu-wsl/ - Nikolay Andonov
在git-scm附带的bash环境中,出现“bash: mklink:命令未找到”的错误。 - Jerry Green

0

我们曾经遇到过类似的问题,并找到了之前答案中未记录的解决方案。

我们需要一种方法来创建一个远程目录链接,可以在Cygwin和Windows 7上都能够工作,指向一个远程Samba(Linux)共享。

我们在Windows PowerShell中使用了这个命令,它起作用了。

CMD /C MKLINK /D C:\local_dir_path\dir \\\\192.168.0.1\remote_dir_path\dir

上述命令可以创建一个在两个目录中都有效的链接。

当然,请根据您的需要更改本地和远程目录。

ln -s 在Cygwin中可用,但在Windows中不可用。

在Windows资源管理器(文件夹视图)中使用“创建链接”命令可以在Windows中工作,但在Cygwin中不起作用。

在Cygwin中输入类似于上面的命令也无法正常工作,我们并没有完全理解原因。也许与字符串或路径的转换有关。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接