C - 函数"链接"的隐式声明;你的意思是"取消链接"吗?,函数"符号链接"的隐式声明



下面是我创建硬链接和软链接的代码...

代码(文件名: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:UsersvbpatAppDataLocalTempcc2r6Yv5.o:b.c:(.text+0x50): undefined reference to `link'
c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe:
C:UsersvbpatAppDataLocalTempcc2r6Yv5.o:b.c:(.text+0xb6): undefined reference to `symlink'
collect2.exe: error: ld returned 1 exit status 

这些函数由 POSIX 定义,并由尝试符合或松散地模仿 POSIX 或从标准化的谱系 POSIX 的后代的 C 实现提供。mingw 使用的 MSVC 运行时不是这样的实现。

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

最新更新