gpt4 book ai didi

c - GNU - 对 `setmode' 的 undefined reference

转载 作者:太空狗 更新时间:2023-10-29 11:27:33 30 4
gpt4 key购买 nike

我正在 Linux 上移植一个 WIN32 库。我能够毫无错误地编译我的库。但是当我尝试链接时,它给出了以下链接错误

undefined reference to `setmode'

我知道 setmode 函数是标准库函数,它位于 unistd.h 中,我在链接时提供参数 -lc终端。

这是 link这进一步减轻了 setmode 的影响。

有什么帮助吗?

最佳答案

恐怕这些答案都是胡说八道。来自 Win32 环境的程序正在使用两种可能的 setmode 函数之一:Microsoft _setmode 函数 documented in MSDN ,或称为 setmode 的 Cygwin 模仿。

这与 BSD setmode 无关。这是一个双参数函数,可将文件描述符设置为二进制或文本转换模式。

如果您的程序需要此功能,但您链接到 LibBSD,程序可能会链接,但它是不正确的。

GNU C 库不提供用于操作 FILE * 流或描述符的文本或二进制模式的接口(interface),即使它提供了,它也不会做任何事情,因为这两种模式是相同的。

在 Cygwin 上需要 Cygwin setmode 函数的代码可能在 Unix 上不做任何事情就可以逃脱:也就是说:

#ifdef __CYGWIN__
setmode(fileno(my_stdio_stream), O_BINARY);
#elif _WIN32
_setmode(_fileno(my_stdio_stream), _O_BINARY);
#else
/* nothing on systems with no text-vs-binary mode */
#endif

关于c - GNU - 对 `setmode' 的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15608116/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com