2010-02-08 1 views
8

У меня 32-битная машина, и я запускаю Ubuntu 9.10 на ней. У меня есть последний компилятор gcc. Проблема, с которой я столкнулась, заключается в том, что у меня есть библиотека, разработанная в 2002 году. Код верный, но когда я пытаюсь его построить, он дает мне ошибки, такие как iostream.h не может быть найден, ошибка: fstream.h: Нет таких файл или каталог и т. д. Есть много файлов, поэтому я не могу их изменить.iostream.h, fstream.h не найдено

Могут ли эти ошибки быть разрешены, если они решены. Я устанавливаю gcc 3.0? Если да, то как установить его поверх моего существующего gcc-компилятора.

+0

Можете ли вы опубликовать код (только раздел включения), включить путь и т. Д.? –

+1

Вы используете gcc или g ++? – zdav

ответ

4

Вы имеете дело с предварительной стандартной библиотекой C++, и вы видели, что она не будет компилироваться со стандартным компилятором. Вы всегда можете попробовать быстро разобраться, создав, скажем, iostream.h с двумя строками #include <iostream> и using namespace std;, и это может сработать. Он не является надежным и может вызвать труднодоступные ошибки, которые появятся в неудобное время.

Если это библиотека из другого места, вы можете увидеть, обновлен ли он.

Вещь в том, что код больше не подходит. Возможно, это было некорректно для какой-то реализации, но это не так. (Вы уверены, что это было изначально для gcc 3.0? Предварительно стандартные компиляторы были, ну, а не стандартными, и имели много странностей. Избегайте того, что это за стандарты.) Если вы устанавливаете исходную систему, возможно, для правильного взаимодействия с библиотекой, и новый код не будет работать. Библиотека, которая не взаимодействует с современным кодом, имеет ограниченное использование.

В противном случае вам придется отказаться от отношения, которое вы не можете изменить в библиотеке, и преобразовать его в стандартный C++. Вероятно, будет довольно много ошибок, которые довольно легко исправить (например, область в for (int i = 0;...)), и могут быть некоторые более тонкие проблемы. Возможно, код был прав для определенного компилятора, но он не сейчас.

1

Почему вы не могли бы написать сценарий для поиска и замены всех экземпляров

#include <iostream.h> 

с

#include <iostream> 

И то же самое для других?

Update: Я согласен с другим ответом, а ниже комментарии ... Я оставлю этот ответ, хотя, потому что я не думаю, что в заявлении

There are lots of files hence I cannot change them

действительна :)

+0

Потому что он не будет обновлять код, который использует заголовки. Предварительно стандартные и стандартизированные библиотеки обычно имели многочисленные несовместимости. – 2010-02-08 22:20:17

+0

@John - Я пробовал это раз в 2003 году, я думаю, с некоторым кодом C++ 1992 года. Там оказалось немного больше, чем это. Классы не совпадают. И как только он скомпилирован, он зависает во время выполнения, вероятно, с сообщением об окончании потока, по-разному. Во всяком случае, я отказался от этого усилия. –

4

fstream.h и подобные файлы являются стандартными версиями fstream и аналогичными файлами, указанными в стандарте C++, которые поставляются с современными компиляторами. Они обычно не совместимы. Честно говоря, если никто не обновил библиотеку, чтобы соответствовать стандарту за последние 8 лет, вряд ли стоит использовать его.

+0

Хорошая точка! Кто скажет, какие другие проблемы останутся, даже если обновление включает. –

+0

@ John Weldon: По моему опыту, могут быть некоторые неприятные и труднореализуемые проблемы. –

Смежные вопросы