编译 c++ 在 mac osx 上使用 gnu/c getline() 编写代码?
我试图在我的 mac osx leopard 机器上编译预先存在的 c++ 包,并收到以下错误:
error: no matching function for call to 'getline(char**, size_t*, FILE*&)'
这可能是因为 getline() 是 GNU 特定扩展。
我可以以某种方式让 osx 默认 g++ 编译器识别此类 GNU 特定扩展吗?
(如果没有,我总是可以提供我自己的实现或 GNU 原始实现,但如果可能的话,我更喜欢有一个“更干净”的解决方案)
I'm trying to compile a pre-existing c++ package on my mac osx leopard machine, and get the following error:
error: no matching function for call to 'getline(char**, size_t*, FILE*&)'
This is probably because getline() is a GNU specific extension.
Can I somehow make the osx default g++ compiler recognize such GNU specific extensions?
(if not, I could always supply my own implementation or GNUs original one, but I prefer to have a "cleaner" solution if possible)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
getline
在 glibc 版本 2.10 及更高版本的stdio.h
中定义,但在早期版本中没有定义,也没有(到目前为止;添加 10.5 肯定没有BSD 派生的 libc 中没有getline
,而 10.7 肯定有。GNU 库中的更改是由于 POSIX 2008 标准的更改而引起的,其中现在包括
getline
。据推测,随着时间的推移,这会传播到其他 libc。 同时,我了解到这给很多项目带来了麻烦。
您可以从 GNU 下载独立版本。
getline
is defined instdio.h
in glibc version 2.10 and later, but not in earlier versions, nor (so far; added 10.5 definitely didn't havegetline
, and 10.7 definitely does) in the BSD derived libc.The change in the GNU libraries came about because of a change in the POSIX 2008 standard, which now includes
getline
.Presumably, this will propogate to other libc over time. In the mean time, I understand that it is causing trouble for a lot of projects.
You can download a stand alone version from GNU.
一般来说,解决方案是使用
autoconf
或一些类似的工具来确定当前平台是否已经有getline
,并仅在需要时提供您自己的定义。示例:
或者类似的东西,您必须调整它以匹配您自己的程序。
Generally, the solution is to use
autoconf
or some similar tool to determine whether the current platform already hasgetline
or not, and supply your own definition only when needed.Example:
or something along those lines, you'll have to adjust it to match your own program.
我不确定我是否见过这里“getline”的具体定义是我所知道的使用 c++ 流+字符串的定义。
http://www.cplusplus.com/reference/string/getline/
I'm not sure I've ever seen that specific definition of 'getline' here is the one I know of which uses c++ streams+strings.
http://www.cplusplus.com/reference/string/getline/