函数“ link”的隐式声明;您的意思是“取消链接”吗?,函数“符号链接”的隐式声明

时间:2020-06-04 15:34:07

标签: c windows unix mingw-w64 mingw32

下面是我创建Hardlink和Softlink的代码...

代码(文件名:b.c):

#include<stdio.h>
#include<fcntl.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
int main(int argc, char*argv[])
{
  if(argc==3)
  {
  printf("Hard linking %s and %s",argv[1],argv[2]);
  if(link(argv[1],argv[2])==0)
  printf("\nHard link created");
  else
  printf("\nLink not created");
  }
  else if(argc==4)
  {
  printf("Soft linking %s and %s",argv[1],argv[2]);
  if(symlink(argv[1],argv[2])==0)
  printf("\nSoft link created");
  else
  printf("\nLink not created");
  }
}

相同的代码在Ubuntu(Linux)中也可以正常工作

我收到此错误(我在Windows 10中使用MiNGW C编译器):


b.c: In function 'main':
b.c:12:6: warning: implicit declaration of function 'link'; did you mean 'unlink'? [-Wimplicit-function-declaration]
12 |   if(link(argv[1],argv[2])==0)
|      ^~~~
|      unlink
b.c:20:6: warning: implicit declaration of function 'symlink' [-Wimplicit-function-declaration]
20 |   if(symlink(argv[1],argv[2])==0)
|      ^~~~~~~       
c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe:
C:\Users\vbpat\AppData\Local\Temp\cc2r6Yv5.o:b.c:(.text+0x50): undefined reference to `link'
c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe:
C:\Users\vbpat\AppData\Local\Temp\cc2r6Yv5.o:b.c:(.text+0xb6): undefined reference to `symlink'
collect2.exe: error: ld returned 1 exit status 

1 个答案:

答案 0 :(得分:0)

这些功能由POSIX定义,并由C实现提供,这些实现试图遵循POSIX或在POSIX上进行松散建模,或者从POSIX标准化的世系继承而来。 mingw使用的MSVC运行时不是这样的实现。

如果您希望能够使用Windows上的标准POSIX接口构建程序,则需要cygwin或(在不久的将来)midipix。或者使用WSL构建Linux程序,而不是构建本机Windows程序-当您的目标并不是实际制作Windows应用程序时,这可能是最简单的选择。