33

Recently I have tested to write an Android application with native code in C/C++. The problem is in making symbolic links when using the Android NDK. After some googling, some say to use Cygwin. I have installed it now. How can I make a symbolic link with Cygwin in Windows 7?

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
aemon
  • 789
  • 2
  • 7
  • 13

4 Answers4

55

In short, define the following environment variable:

CYGWIN=winsymlinks:nativestrict

According to Cygwin documentation:

If set to winsymlinks:native or winsymlinks:nativestrict, Cygwin creates symlinks as native Windows symlinks on filesystems and OS versions supporting them.

The difference between winsymlinks:native and winsymlinks:nativestrict is this: If the filesystem supports native symlinks and Cygwin fails to create a native symlink for some reason, it will fall back to creating Cygwin default symlinks with winsymlinks:native, while with winsymlinks:nativestrict the symlink(2) system call will immediately fail.

You should also make sure you run Cygwin with elevated privileges (right-click the shortcut and choose Run as Administrator, or set the mintty shortcut property, Advanced → Run as Administrator).

Some details are provided in the other answer.

Community
  • 1
  • 1
oHo
  • 51,447
  • 27
  • 165
  • 200
  • 2
    $ export CYGWIN="winsymlinks:nativestrict" worked for me in Windows 8 – aqavi_paracha Jan 05 '16 at 08:30
  • 1
    I think you would have done better to refer to your own Question+Answer at http://stackoverflow.com/questions/18654162/enable-native-ntfs-symbolic-links-for-cygwin ! – PJTraill May 24 '16 at 15:33
  • 3
    Using `CYGWIN=winsymlinks:native` is wrong for so many different workflows. If you are OK with using "fall back to creating Cygwin default symlinks" then why would you even try to make native in first place? If someone needs "native" then ... they need "native". The only proper option is "CYGWIN=winsymlinks:nativestrict"! – Victor Yarema Feb 13 '20 at 11:50
9

I got it the next day! So, not to wrongly get ignorance thinking like me (newbie to Cygwin), I answer it now.

Making a symbolic link for Windows 7 is easy with the usual command:

ln -s

The answer is setting up Cygwin with the required packages such as make, etc.

Read the requirements clearly: Android NDK

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
aemon
  • 789
  • 2
  • 7
  • 13
0

You may try to use "mklink" instead of "ln -s" as Tony O'Hagan suggested in an answer to Git Bash shell fails to create symbolic links.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
0

We had a similar problem and had a solution not documented in previous answers.

We needed a way to create a directory remote link that worked for both Cygwin and Windows 7 to a remote Samba (Linux) share.

We used this command in Windows PowerShell and it worked.

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

The above command makes a link that works in both.

Of course, please change the local and remote directories to meet your needs.

ln -s works in Cygwin, but not Windows.

Using a "make link" command in Windows Explorer (folder view) worked in Windows, but not in Cygwin.

A similar command as above entered in Cygwin did not work and we didn't completely understand why. Perhaps it is related to conversion of strings or paths.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Grogoyle
  • 1
  • 2