我遇到包括iostream.h
和fstream.h
等标准头文件的问题。在我的系统上,在usr/include/c++/4.3
下,没有任何文件具有“.h”扩展名(例如,它只是 iostream 而不是 iostream.h )。 / p>
这很好,花花公子,但我正在尝试使用另一个库DCMTK,它可以执行#include<iostream.h>
之类的操作。不幸的是,在我的系统上没有“iostream.h”这样的东西,只有“iostream”,这意味着我的编译器给了我像error: iostream.h: No such file or directory
这样的错误。
我想我可以创建从iostream.h
到iostream
的软链接,但这似乎可能会产生麻烦,首先是麻烦,其次,真的很烦人。还有其他解决方案吗?
为了完整起见,我给编译该命令的命令是
g++ -o gc_on_ctp -g -Wall -Idicom/include -Ldicom/lib gc_on_ctp.cpp -ldcmdata
可以想象,头文件位于dicom / include下,库位于dicom / lib下,名为libdcmdata.a。
答案 0 :(得分:7)
我建议你看看here。它解释了为什么以及何时出现iostream.h / iostream
,为什么它存在以及如何解决这些问题。
主要iostream.h
被视为 DEPRECATED UNRELIABLE 和 IMPLEMENTATION SPECIFIC 并使用{ {1}}代替那个可能会导致错误。
答案 1 :(得分:6)
只需创建一个新的iostream.h文件,其中包含一行:#include <iostream>
。这似乎是DCMTK的一个大错误,因为标准是这些文件名中不应该有.h。
答案 2 :(得分:3)
这些标头已弃用/预标准。在gcc上我认为它们现在位于#include <backward/iostream.h>
等。
另一方面,如果您要链接的库需要较旧的不兼容版本的标准库,则可能会遇到更多问题。
答案 3 :(得分:1)
我会修复(过时的)库。您可以使用就地正则表达式搜索和替换来执行此操作:
perl -e "s/iostream.h/iostream/g;" -pi $(find . -iname "*.cpp")
或
find . -iname "*.cpp" -print0 | xargs -0 sed -i 's/iostream.h/iostream/g'
注意:执行此操作时要小心......它会从您开始的路径递归影响所有文件。