出于某些奇怪的原因,当我尝试将函数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*, ...);
Google似乎真的不喜欢谈论C,因为我可以找到如何在几乎任何现有语言上获得workdir,除了C.唯一弹出的是一些描述3个函数的文档:getcwd,getwd和get_current_dir_name。我真的想使用get_current_dir_name,因为它的清洁度。
我该如何处理?这是minGW的错误吗?或者我错过了什么?
您显然未能包含任何包含get_current_dir_name()
声明的标头。因此,编译器将假设返回值int
,这不是printf()
的有效第一个参数(您应该增加警告级别,这样您将得到错误而不仅仅是警告)。
此外,链接失败,因此您也不会链接到实现该函数的库,这是预期的:get_current_dir_name()
是GNU扩展,不是C标准库的一部分。
在Windows上,您需要使用Windows API提供的等效功能,即GetCurrentDirectory()
中声明的windows.h
。