Я пытаюсь предварительно скомпилировать заголовки Boost.

Первый эксперимент — с std::headers. Я создаю файл std.hpp:

#include <vector>
#include <iostream>
// And other std:: headers

После того:

g++ std.hpp

Скопируйте std.hpp.gch в /usr/include/c++/4.4.5.

И написать тестовую программу:

#include <std.hpp>

int main() {
    std::cout << "Hello, precompiled world!" << std::endl;
    return 0;
}

Работает отлично.

Теперь попробуйте предварительно скомпилировать заголовки Boost.

Я создаю файл boost.hpp:

#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/karma.hpp>

После того:

g++ boost.hpp

Скопируйте boost.hpp.gch в /usr/local/include/boost

И написать тестовую программу:

#include <boost/boost.hpp>

int main() {
    // Some code...
    return 0;
}

Но есть ошибка:

main.cpp:2:33: error: /usr/local/include/boost/boost.hpp: No such file or directory.

Попробуйте, для эксперимента:

#include </usr/local/include/boost/boost.hpp>

int main() {
    // Some code...
    return 0;
}

Та же ошибка.

Попробуйте скопировать boost.hpp.gch в другое место - та же ошибка.

Если положить файл boost.hpp в то же место - работает нормально (так что проблем с путем нет):

ls /usr/local/include/boost | grep boost
boost.hpp
boost.hpp.gch

Поэтому компилятор использует заголовок boost.hpp. Но почему компилятор не видит предварительно скомпилированный boost.hpp.gch??

4
Denis Shevchenko 4 Мар 2011 в 11:43
Возможно, /usr/local/include отсутствует в вашем пути включения. Попробуйте g++ -I/usr/local/include.
 – 
Benoit
4 Мар 2011 в 11:47
/usr/local/include находится в моем пути включения. В этом пути помещен 'boost' директор. :-) И как я уже сказал, файл boost.hpp по тому же пути работает нормально, а boost.hpp.gch - нет.
 – 
Denis Shevchenko
4 Мар 2011 в 11:53
Для эксперимента попробуйте g++ -I/usr/local/include - та же ошибка...
 – 
Denis Shevchenko
4 Мар 2011 в 12:14
Пробую прекомпилировать отдельный буст-заголовок: g++ /usr/local/include/boost/spirit/include/qi.hpp, после этого удалить qi.hpp с этого места - та же ошибка.
 – 
Denis Shevchenko
4 Мар 2011 в 12:27

1 ответ

Это может быть ошибка gcc, как описано в http://gcc.gnu.org/ bugzilla/show_bug.cgi?id=46110

3
trenki 11 Мар 2011 в 00:43