隐式声明函数'link';你是说'unlink'吗?

问题描述 投票:0回答:1

以下是我创建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 
c windows unix mingw-w64 mingw32
1个回答
0
投票

这些函数由POSIX定义,并由C实现提供,这些C实现试图符合或松散地模拟POSIX或从POSIX标准化的血统中继承。mingw使用的MSVC运行时不是这样的实现。

如果你想能够在Windows上使用标准的POSIX接口来构建程序,你就需要用到 cygwin 或(在)将来 魅影. 或者使用WSL构建Linux程序,而不是本地Windows程序--当你的目标实际上不是制作Windows应用程序时,这可能是最简单的选择。

© www.soinside.com 2019 - 2024. All rights reserved.