Форум программистов, компьютерный форум CyberForum.ru

boost::gil png.h No such file or directory - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.60
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
29.12.2013, 00:09     boost::gil png.h No such file or directory #1
Беда (: Вообщем есть проект на Qt и хочу сделать общие алгоритмы обработки изображений используя boost::gil. Приведу код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <QHBoxLayout>
#include <QLabel>
#include <QImage>
#include <boost/gil/gil_all.hpp>
#include <boost/gil/extension/io/png_dynamic_io.hpp>
// еще куча всего
// и далее важная часть
static void x_gradient_qt(const boost::gil::gray8c_view_t &src, boost::gil::gray8s_view_t const &dst)
{
    for (int y = 0; y != src.height(); ++y)
        for (int x = 1; x + 1 != src.width(); ++x)
            dst(x, y) = (src(x - 1, y) - src(x + 1, y)) / 2;
}
 
template<typename T = QWidget>
static std::unique_ptr<T> view_image_pair(QImage const &src, QImage &dst)
{
    std::unique_ptr<T> window(new T);
    QHBoxLayout *layout = new QHBoxLayout(window.get());
 
    QLabel *src_label;
    layout->addWidget(src_label = new QLabel);
    src_label->setPixmap(QPixmap::fromImage(src));
 
    QLabel *dst_label;
    layout->addWidget(dst_label = new QLabel);
    dst_label->setPixmap(QPixmap::fromImage(dst));
 
    return std::move(window);
}
// button click handler
void MainWindow::on_pushButton_clicked()
{
    QImage src(ui->lineEdit->text());
    QImage dst(src.size(), src.format());
 
    std::unique_ptr<QWidget> window = view_image_pair(src, dst);
    x_gradient_qt(src, dst);
 
    window->show();
}
В данном примере я пытаюсь собрать алгоритм вычисления тривиального градиента (код позаимствовал с официального сайта) и показать его в дополнительного окошка.

Собираю проект на Qt Creator + MinGW 4.8.1 и получаю следующий лог ошибок:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
C:/Qt/Qt5.1.1/Tools/mingw48_32/bin/mingw32-make -f Makefile.Release
mingw32-make[1]: Entering directory 'D:/Work/www.freelancer.com/Implement an algorithmus for Image Processing/src/build'
g++ -c -pipe -fno-keep-inline-dllexport -O2 -std=c++0x -frtti -Wall -Wextra -fexceptions -mthreads -DUNICODE -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_NEEDS_QMAIN -I..\ImageHandler -I"C:\boost_1_55_0" -I"C:\Qt\Qt5.1.1\5.1.1\mingw48_32\include" -I"C:\Qt\Qt5.1.1\5.1.1\mingw48_32\include\QtWidgets" -I"C:\Qt\Qt5.1.1\5.1.1\mingw48_32\include\QtGui" -I"C:\Qt\Qt5.1.1\5.1.1\mingw48_32\include\QtCore" -I"release" -I"." -I"." -I"C:\Qt\Qt5.1.1\5.1.1\mingw48_32\mkspecs\win32-g++" -o release\mainwindow.o ..\ImageHandler\mainwindow.cpp
In file included from C:\boost_1_55_0/boost/gil/extension/io/png_dynamic_io.hpp:37:0,
                 from ..\ImageHandler\mainwindow.cpp:8:
C:\boost_1_55_0/boost/gil/extension/io/png_io.hpp:35:17: fatal error: png.h: No such file or directory
 #include "png.h"
                 ^
Makefile.Release:1109: recipe for target 'release/mainwindow.o' failed
mingw32-make[1]: Leaving directory 'D:/Work/www.freelancer.com/Implement an algorithmus for Image Processing/src/build'
makefile:34: recipe for target 'release' failed
compilation terminated.
mingw32-make[1]: *** [release/mainwindow.o] Error 1
mingw32-make: *** [release] Error 2
21:53:45: The process "C:\Qt\Qt5.1.1\Tools\mingw48_32\bin\mingw32-make.exe" exited with code 2.
Error while building/deploying project ImageHandler (kit: MinGW)
When executing step 'Make'
Добавлено через 9 минут
Да, приведу кусок кода с заголовочного файла png_io.hpp
C++
1
2
3
extern "C" {
#include "png.h"
}
Далее захожу в папку C:\boost_1_55_0/boost/gil/extension/io/ и вижу что я не вижу там заголовочного файла "png.h" хотя я скачал и разархивировал boost как было сказано в гайде по установке.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
29.12.2013, 00:13     boost::gil png.h No such file or directory #2
загляните в png_io.hpp:
C++
1
2
3
4
5
6
7
8
9
10
11
...
 
#ifndef GIL_PNG_IO_H
#define GIL_PNG_IO_H
 
/// \file
/// \brief  Support for reading and writing PNG files
///         Requires libpng and zlib!
//
 
...
это отдельные сторонние либы, которые должны быть приделаны к проекту.
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
29.12.2013, 00:24  [ТС]     boost::gil png.h No such file or directory #3
DU, А можно еще пару слов о том что это за либы и где их искать?

Добавлено через 1 минуту
http://www.libpng.org/pub/png/libpng.html я так понимаю это libpng
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
29.12.2013, 00:29     boost::gil png.h No such file or directory #4
да, оно. libpng требует zlib и там на сайте есть ссылка на zlib:
http://www.zlib.net/
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
29.12.2013, 01:24  [ТС]     boost::gil png.h No such file or directory #5
http://tjaden.strangesoft.net/loadpng/mingw.html нашел я такую вот фишку для того что-бы быстро поставить себе обе библиотеки.
Когда архивы распаковались есть .dll файлы в папке bin, .lib.a\.lib в папке lib и хедеры в include.

Теперь вопрос: куда это все распихать? Если я верно понимаю их содержимое нужно скинуть в корень MinGW что-бы компилятор смог их найти.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
29.12.2013, 01:50     boost::gil png.h No such file or directory #6
ну да. прописать в проекте пути до новых инклудов так, чтобы при сборке, когда в исходниках
встретится "#include <png.h>" компилятор искал эти инклуды еще и по указанным путям. он их там
найдет и все будет хорошо.
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
29.12.2013, 02:17  [ТС]     boost::gil png.h No such file or directory #7
DU,
Цитата Сообщение от outoftime Посмотреть сообщение
extern "C" {
#include "png.h"
}
Там относительный путь, если я правильно помню то при относительном пути компилятор сначала ищет локальный файл а потом файл с этим названием в путях по умолчанию.

Собственно вопрос о том где компилятор будет искать эти файлы по умолчанию, что-бы можно было не трогать конфигурацию проекта.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
29.12.2013, 02:29     boost::gil png.h No such file or directory #8
не работаю с креатором. вот тут вроде что-то есть:
http://qt-project.org/doc/qtcreator-...libraries.html

самое простое в pro файле попробоват написать:
INCLUDEPATH += <your path>
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.12.2013, 14:25     boost::gil png.h No such file or directory
Еще ссылки по теме:

Ошибка при "сборке" Cannot open include file: 'stdafx.h': No such file or directory C++
Cannot open include file: 'libr.h': No such file or directory C++
Cannot open include file: 'iostream.h': No such file or directory C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
29.12.2013, 14:25  [ТС]     boost::gil png.h No such file or directory #9
DU, Закинул zlib & libpng хедеры в boost\gil\extension\io , папку библиотек добавил в проект, теперь новый лог ошибок
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
g++ -Wl,-s -Wl,-subsystem,windows -mthreads -o release\ImageHandler.exe release/main.o release/mainwindow.o release/moc_mainwindow.o  -lglu32 -lopengl32 -lgdi32 -luser32 -lmingw32 -lqtmain -LC:\boost_1_55_0\lib -LC:\Qt\Qt5.1.1\5.1.1\mingw48_32\lib -lQt5Widgets -lQt5Gui -lQt5Core 
release/mainwindow.o:mainwindow.cpp:(.text+0x2a1): undefined reference to `png_set_IHDR'
release/mainwindow.o:mainwindow.cpp:(.text+0x2b5): undefined reference to `png_write_info'
release/mainwindow.o:mainwindow.cpp:(.text+0x31c): undefined reference to `png_write_row'
release/mainwindow.o:mainwindow.cpp:(.text+0x33d): undefined reference to `png_write_end'
release/mainwindow.o:mainwindow.cpp:(.text+0x35d): undefined reference to `png_destroy_write_struct'
Makefile.Release:80: recipe for target 'release\ImageHandler.exe' failed
c:/qt/qt5.1.1/tools/mingw48_32/bin/../lib/gcc/i686-w64-mingw32/4.8.0/../../../../i686-w64-mingw32/bin/ld.exe: release/mainwindow.o: bad reloc address 0x2 in section `.text$_ZN5boost6detail15sp_counted_baseD1Ev[__ZN5boost6detail15sp_counted_baseD1Ev]'
collect2.exe: error: ld returned 1 exit status
mingw32-make[1]: *** [release\ImageHandler.exe] Error 1
mingw32-make[1]: Leaving directory 'D:/Work/www.freelancer.com/Implement an algorithmus for Image Processing/src/build'
makefile:34: recipe for target 'release' failed
mingw32-make: *** [release] Error 2
11:12:53: The process "C:\Qt\Qt5.1.1\Tools\mingw48_32\bin\mingw32-make.exe" exited with code 2.
Error while building/deploying project ImageHandler (kit: MinGW)
When executing step 'Make'
Кажется когда используешь библиотеку libpng надо явно указать компилятору о том что ты ее используешь а в строке 1 ее нет, проблема в этом?

Добавлено через 1 час 8 минут
Добавил 2 флага для линковки библиотек
Bash
1
LIBS += -lz -lpng -ljpeg
На примере
C++
1
2
3
4
5
6
    using namespace boost::gil;
 
    rgb8_image_t img(512, 512);
    rgb8_pixel_t red(255, 0, 0);
    fill_pixels(view(img), red);
    png_write_view("redsquare.png", const_view(img));
Работает.
Yandex
Объявления
29.12.2013, 14:25     boost::gil png.h No such file or directory
Ответ Создать тему
Опции темы

Текущее время: 11:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru