出于某些奇怪的原因,当我尝试使用函数get_current_dir_name和MinGW GCC编译器时, 我在链接上得到了这个结果:
undefined reference to `get_current_dir_name'
collect2.exe: error: ld returned 1 exit status
但是,只有在使用像这样的函数
时才能得到这个printf("%i", get_current_dir_name());
或者
printf("%s", get_current_dir_name());
当我尝试
时printf(get_current_dir_name());
我得到了这个,这没有任何意义,因为该函数返回一个char *,根据文档:
tester.c: In function 'main':
tester.c:16:2: warning: passing argument 1 of 'printf' makes pointer from integer without a cast [enabled by default]
printf(get_current_dir_name());
^
In file included from tester.c:1:0:
c:\mingw\include\stdio.h:294:37: note: expected 'const char *' but argument is of type 'int'
_CRTIMP int __cdecl __MINGW_NOTHROW printf (const char*, ...);
谷歌似乎真的不喜欢谈论C,因为我可以找到如何在几乎任何现有语言上获得workdir,除了C.唯一突然出现的是一些描述3个函数的文档:getcwd,getwd和get_current_dir_name。我真的想使用get_current_dir_name,因为它的清洁。
我该如何处理?这是minGW的错误吗?或者我错过了什么?
答案 0 :(得分:6)
您显然未能包含任何包含get_current_dir_name()
声明的标头。因此,编译器将假定返回值int
,这不是printf()
的有效第一个参数(您应该增加警告级别,这样您将得到错误而不仅仅是警告)。
此外,链接失败,因此您也不会链接到实现该函数的库,这是预期的:get_current_dir_name()
是GNU扩展,不是C标准库的一部分。
在Windows上,您需要使用在windows.h
中声明的Windows API提供的等效功能,即GetCurrentDirectory()
。