LINUX.ORG.RU

Нереально собрать Similar Vision

 , ,


0

1

https://github.com/stereomatchingkiss/similar_vision Оно вроде использует привычные Boost и Qt, но писалось под винду.

Сначала эта штука захотела кастомной сборки OpenCV. Ок, я собрал. Теперь при компиляции вываливается ошибка вида "...has no member named ‘emplace_back’" что означает отсутствие какой-то хрени в моём GCC. Я уже пробовал подсовывать компилятору -std=gnu++11 -std=gnu++0x, но что-то не помогает.

Буду очень рад, если кто-нибудь соберёт Similar Vision в Linux и расскажет как он поборол проблемы при сборке.

★★★★

Ответ на: комментарий от kknight

По идее CONFIG += c++11 должен помочь с emplace_back проблемой

У них ещё написано в списке зависимостей, (https://github.com/stereomatchingkiss/similar_vision/blob/master/DETAILS.md ) что им нужен boost1.61

Ладно, это будет следующей проблемой.

Открой Makefile, который генерируется qmake. Добавь в строку CXXFLAGS:

-std=c++11

Сохрани и запусти make(без qmake, чтобы Makefile не перезаписался)

fsb4000 ★★★★★ ()
Ответ на: комментарий от kknight

Так проверь уже версию gcc. Может у тебя древнее говно мамонта, которое не поддерживает c++11. Или такая же древняя stl.

Да и вообще, телепатов тут нет. Лог ошибки давай.

alexku ()
Ответ на: комментарий от alexku

У меня GCC6. Я обновил Boost, и теперь ошибка уже другая:

core/pics_find_img_hash.cpp: In member function ‘void pics_find_img_hash::compute_hash_mt()’:
core/pics_find_img_hash.cpp:175:32: error: use of deleted function ‘std::atomic<long unsigned int>::atomic(const std::atomic<long unsigned int>&)’
     std::atomic<size_t> size = 0;
                                ^
In file included from /usr/include/qt5/QtCore/qatomic_cxx11.h:45:0,
                 from /usr/include/qt5/QtCore/qbasicatomic.h:53,
                 from /usr/include/qt5/QtCore/qatomic.h:46,
                 from /usr/include/qt5/QtCore/qglobal.h:1129,
                 from /usr/include/qt5/QtCore/qelapsedtimer.h:43,
                 from /usr/include/qt5/QtCore/QElapsedTimer:1,
                 from core/pics_find_img_hash.hpp:4,
                 from core/pics_find_img_hash.cpp:1:
/usr/include/c++/6/atomic:669:7: note: declared here
       atomic(const atomic&) = delete;
       ^~~~~~
/usr/include/c++/6/atomic:673:17: note:   after user-defined conversion: constexpr std::atomic<long unsigned int>::atomic(std::atomic<long unsigned int>::__integral_type)
       constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
                 ^~~~~~
Makefile:889: ошибка выполнения рецепта для цели «pics_find_img_hash.o»
make: *** [pics_find_img_hash.o] Ошибка 1

kknight ★★★★ ()
Ответ на: комментарий от fsb4000

Спс, это помогло. Теперь разбираю следующие косяки:

advance_setting_dialog.o: In function `std::_Function_handler<cv::Ptr<cv::img_hash::ImgHashBase> (), advance_setting_dialog::get_hash_algo() const::
...
single_bar_plot.cpp:(.text+0x270): undefined reference to `QwtAbstractScaleDraw::setTickLength(QwtScaleDiv::TickType, double)'
single_bar_plot.cpp:(.text+0x281): undefined reference to `QwtAbstractScaleDraw::setTickLength(QwtScaleDiv::TickType, double)'
single_bar_plot.cpp:(.text+0x296): undefined reference to `QwtAbstractScaleDraw::setTickLength(QwtScaleDiv::TickType, double)'
single_bar_plot.cpp:(.text+0x2a5): undefined reference to `QwtAbstractScaleDraw::enableComponent(QwtAbstractScaleDraw::ScaleComponent, bool)'
single_bar_plot.cpp:(.text+0x2bf): undefined reference to `QwtScaleDraw::setLabelRotation(double)'
single_bar_plot.cpp:(.text+0x2cc): undefined reference to `QwtScaleDraw::setLabelAlignment(QFlags<Qt::AlignmentFlag>)'
single_bar_plot.cpp:(.text+0x2da): undefined reference to `QwtPlot::setAxisScaleDraw(int, QwtScaleDraw*)'
single_bar_plot.cpp:(.text+0x2ec): undefined reference to `QwtPlot::setAxisTitle(int, QString const&)'
single_bar_plot.cpp:(.text+0x2fc): undefined reference to `QwtPlot::setAxisMaxMinor(int, int)'
single_bar_plot.cpp:(.text+0x311): undefined reference to `QwtScaleDraw::QwtScaleDraw()'
single_bar_plot.cpp:(.text+0x326): undefined reference to `QwtAbstractScaleDraw::setTickLength(QwtScaleDiv::TickType, double)'
single_bar_plot.cpp:(.text+0x334): undefined reference to `QwtPlot::setAxisScaleDraw(int, QwtScaleDraw*)'
single_bar_plot.cpp:(.text+0x33c): undefined reference to `QwtPlot::plotLayout()'
single_bar_plot.cpp:(.text+0x34b): undefined reference to `QwtPlotLayout::setCanvasMargin(int, int)'
single_bar_plot.cpp:(.text+0x384): undefined reference to `QwtScaleDraw::setLabelRotation(double)'
single_bar_plot.cpp:(.text+0x39c): undefined reference to `QwtScaleDraw::~QwtScaleDraw()'
single_bar_plot.o: In function `single_bar_plot::single_bar_plot(QWidget*)':
single_bar_plot.cpp:(.text+0x3d0): undefined reference to `QwtPlot::QwtPlot(QWidget*)'
single_bar_plot.cpp:(.text+0x41c): undefined reference to `QwtPlotBarChart::QwtPlotBarChart(QString const&)'
single_bar_plot.cpp:(.text+0x45f): undefined reference to `QwtPlotAbstractBarChart::setLayoutPolicy(QwtPlotAbstractBarChart::LayoutPolicy)'
single_bar_plot.cpp:(.text+0x470): undefined reference to `QwtPlotAbstractBarChart::setLayoutHint(double)'
single_bar_plot.cpp:(.text+0x47e): undefined reference to `QwtPlotAbstractBarChart::setSpacing(int)'
single_bar_plot.cpp:(.text+0x4d9): undefined reference to `QwtPlotCanvas::QwtPlotCanvas(QwtPlot*)'
single_bar_plot.cpp:(.text+0x503): undefined reference to `QwtPlotCanvas::setBorderRadius(double)'
single_bar_plot.cpp:(.text+0x579): undefined reference to `QwtPlot::setCanvas(QWidget*)'
single_bar_plot.cpp:(.text+0x585): undefined reference to `QwtPlotItem::attach(QwtPlot*)'
single_bar_plot.cpp:(.text+0x59c): undefined reference to `QwtPlot::setAutoReplot(bool)'
single_bar_plot.cpp:(.text+0x5b3): undefined reference to `QwtColumnSymbol::QwtColumnSymbol(QwtColumnSymbol::Style)'
single_bar_plot.cpp:(.text+0x5c7): undefined reference to `QwtColumnSymbol::setLineWidth(int)'
single_bar_plot.cpp:(.text+0x5d8): undefined reference to `QwtColumnSymbol::setFrameStyle(QwtColumnSymbol::FrameStyle)'
single_bar_plot.cpp:(.text+0x614): undefined reference to `QwtColumnSymbol::setPalette(QPalette const&)'
single_bar_plot.cpp:(.text+0x62c): undefined reference to `QwtPlotBarChart::setSymbol(QwtColumnSymbol*)'
single_bar_plot.cpp:(.text+0x67e): undefined reference to `QwtPlot::~QwtPlot()'
single_bar_plot.o: In function `single_bar_plot::set_data(QVector<double> const&, QStringList const&, QColor const&)':
single_bar_plot.cpp:(.text+0x72c): undefined reference to `QwtPlotBarChart::setSamples(QVector<double> const&)'
single_bar_plot.cpp:(.text+0x773): undefined reference to `QwtColumnSymbol::setPalette(QPalette const&)'
single_bar_plot.o: In function `single_bar_plot::set_main_title(QString const&)':
single_bar_plot.cpp:(.text+0x151): undefined reference to `QwtPlot::setTitle(QString const&)'
single_bar_plot.o: In function `(anonymous namespace)::label_scale_draw::~label_scale_draw()':
single_bar_plot.cpp:(.text+0x19d): undefined reference to `QwtScaleDraw::~QwtScaleDraw()'
single_bar_plot.o: In function `single_bar_plot::set_orientation(Qt::Orientation)':
single_bar_plot.cpp:(.text+0x36d): undefined reference to `QwtPlot::updateCanvasMargins()'
single_bar_plot.o: In function `single_bar_plot::~single_bar_plot()':
single_bar_plot.cpp:(.text._ZN15single_bar_plotD2Ev[_ZN15single_bar_plotD5Ev]+0x62): undefined reference to `QwtPlot::~QwtPlot()'
single_bar_plot.o: In function `single_bar_plot::~single_bar_plot()':
single_bar_plot.cpp:(.text._ZN15single_bar_plotD0Ev[_ZN15single_bar_plotD5Ev]+0x61): undefined reference to `QwtPlot::~QwtPlot()'
single_bar_plot.o:(.data.rel.ro._ZTI15single_bar_plot[_ZTI15single_bar_plot]+0x10): undefined reference to `typeinfo for QwtPlot'
single_bar_plot.o:(.data.rel.ro+0x10): undefined reference to `typeinfo for QwtScaleDraw'
...
moc_pics_find_img_hash.o: In function `pics_find_img_hash::~pics_find_img_hash()':
moc_pics_find_img_hash.cpp:(.text._ZN18pics_find_img_hashD2Ev[_ZN18pics_find_img_hashD5Ev]+0x65): undefined reference to `cv::Mat::deallocate()'
moc_pics_find_img_hash.cpp:(.text._ZN18pics_find_img_hashD2Ev[_ZN18pics_find_img_hashD5Ev]+0xc9): undefined reference to `cv::fastFree(void*)'
moc_pics_find_img_hash.o: In function `pics_find_img_hash::~pics_find_img_hash()':
moc_pics_find_img_hash.cpp:(.text._ZN18pics_find_img_hashD0Ev[_ZN18pics_find_img_hashD5Ev]+0x65): undefined reference to `cv::Mat::deallocate()'
moc_pics_find_img_hash.cpp:(.text._ZN18pics_find_img_hashD0Ev[_ZN18pics_find_img_hashD5Ev]+0xc9): undefined reference to `cv::fastFree(void*)'
collect2: error: ld returned 1 exit status
Makefile:317: ошибка выполнения рецепта для цели «similar_vision»
make: *** [similar_vision] Ошибка 1

kknight ★★★★ ()
Ответ на: комментарий от fsb4000

Библиотека называется libqwt.so

-lqwt

Можно попробовать добавить это в Makefile в строку

LIBS = .....

fsb4000 ★★★★★ ()

similar_vision is free and open-source software, it is released under the DBAD license.

DON'T BE A DICK PUBLIC LICENSE

Порадовало.

anonymous ()
Ответ на: комментарий от kknight

Спс, это помогло.

Т.е. пришлось не только доставлять зависимости, но и править исходники? Я надеюсь, когда у тебя общими усилиями всё кончится благополучно, ты отошлёшь авторам патч (ну и список требуемых зависимостей для сборки).

anonymous ()
Ответ на: комментарий от kknight

Их природа в том, что линкер не может найти библиотеку, в которой они определены.

В случае с make, когда либа лежит по стандартному пути в мэйкфайл достаточно добавить

LDFLAGS+=-lтвоя_либа

или, если либа лежит где-то в другом месте, то

LDFLAGS+=-Lпуть/к/либе -lтвоя_либа

Но ты так и не понял, что здесь телепаты не живут, и выдаёшь неюзабельные результаты твоих никому неизвестных потуг и хочешь, чтобы тебе дали совет.

alexku ()
Ответ на: комментарий от anonymous

Я уже решил свою проблему, кстати. Так что платить буду не я, а те анонимусы, которым любопытно узнать ответ.

kknight ★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.