[personal profile] dememax
Долго не мог понять, почему кросс-компиляция пакета, который зависит от libpcap приводит к тому, что включаются заголовочные файлы из хоста (/usr/include вместо локальных для кросс-компиляции).

Нашёл, что откуда-то появляется "-I/usr/include" в CXXFLAGS.
Методом проб и ошибок дошёл до виновника: оказалось, что чтобы определить зависимость от pcap в моём скрипте CMake вызывается pcap-config (у libpcap нет описания для pkgconfig, но есть вот этот конфигурационный скрипт: вообще, логично, что он написан на shell, для кросс-компиляции - самое оно), но в нём нет никакой пользы для кросс-компиляции, к сожалению. Например: http://trac.aircrack-ng.org/ticket/1528

Действительно, даже собранный для кросс-компиляции этот скрипт выводит следующее:
> ./build_dir/target-mips_34kc_musl-1.1.15/libpcap-1.7.4/pcap-config --cflags 
-I/usr/include
Нет слов.

В результате, люди чего только не делают. Вот, как в OpenWRT адаптируют pppd/Makefile.linux для сборки с libpcap:
https://github.com/openwrt/openwrt/blob/master/package/network/services/ppp/patches/300-filter-pcap-includes-lib.patch

Ещё, бродя по исходникам, наткнулся на феерический отступ, напоминающий закладку в коде, когда далеко-далеко за пределами 80-ой колонки что-нибудь вставляют (проскроллируйте вправо до конца):
https://github.com/openwrt/openwrt/blob/master/package/network/utils/tcpdump/patches/002-remove_static_libpcap_check.patch
UPD: А, ну, это строки удаляются из автоконфигурного скрипта, он автоматически генерируется. Но, всё-равно, "сюрприз".

P.S.: Кстати, нашёл другие пакеты, у которых те же проблемы:
http://www.yoctoproject.org/docs/2.2/mega-manual/mega-manual.html

23.6.4. Binary Configuration Scripts Disabled

Some of the core recipes that package binary configuration scripts now disable the scripts due to the scripts previously requiring error-prone path substitution. Software that links against these libraries using these scriptsshould use the much more robust pkg-config instead. The list of recipes changed in this version (and their configuration scripts) is as follows:
     directfb (directfb-config)
     freetype (freetype-config)
     gpgme (gpgme-config)
     libassuan (libassuan-config)
     libcroco (croco-6.0-config)
     libgcrypt (libgcrypt-config)
     libgpg-error (gpg-error-config)
     libksba (ksba-config)
     libpcap (pcap-config)
     libpcre (pcre-config)
     libpng (libpng-config, libpng16-config)
     libsdl (sdl-config)
     libusb-compat (libusb-config)
     libxml2 (xml2-config)
     libxslt (xslt-config)
     ncurses (ncurses-config)
     neon (neon-config)
     npth (npth-config)
     pth (pth-config)
     taglib (taglib-config)
Additionally, support for pkg-config has been added to some recipes in the previous list in the rare cases where the upstream software package does not already provide it.

Date: 2016-12-07 01:49 pm (UTC)
From: [identity profile] yury klyuev (from livejournal.com)
Ты сейчас над каким проектом работаешь?

Date: 2016-12-07 03:55 pm (UTC)
From: [identity profile] fatoff.livejournal.com
С недавнего времени пытаюсь подключать packages вместо отдельных includes и libs, и головной боли в результате на порядок меньше. Компоненты, никак. И при таком подходе версии компонентов как попало через системные include и libs не пересекаются.
From: [identity profile] fatoff.livejournal.com
Linux / OSX. Увы, пока не знаю OpenWRT, но подключение прочих монструозных packages просто на ура. Уже решил никогда просто не спешить напрямую прописывая includes и libs, сначала ищу, как package config задействовать для подключаемой библиотеки. Естественно, сначала в систему dev package поставить. apt-get / brew наши друзья, знают о цельности и зависимостях пакетов, также.
Edited Date: 2016-12-07 10:20 pm (UTC)

Date: 2016-12-07 03:59 pm (UTC)
From: [identity profile] vaddimka.livejournal.com
я возможно какой-то неправильный, но мне не нравится CMake, совсем
я могу юзать мейкфайлы, qmake какой-нибудь
но вот этот долбанутый синтаксис симейка мне реально неудобен, при этом вроде как полно народу его пользует и не жужжат

Date: 2016-12-07 10:15 pm (UTC)
From: [identity profile] fatoff.livejournal.com
Совершенно согласен. После того, как qmake научили работать с packages, от CMake не так много преимуществ. Но! Если нет qmake, соответственно Qt-шного проекта, то лучше CMake тоже ничего нет. Он же препроцессор для платформенного make или build, как и qmake.
From: [identity profile] fatoff.livejournal.com
Максим, ты меня недопонял. Я не выступаю за билд пакетов при помощи Qt или CMake, особенно, если они изначально не имеют общего с Qt. Я за разумное использование пакетов, что возможно с обоими Qt и CMake. Однажды обнаружил, и использую в .pro файлах qmake. Вот так я адаптировал .pro файл из http://www.robot-home.it/blog/download/Tutorial/ImageCompressionDemo.rar

QT += core gui opengl

QT_CONFIG -= no-pkg-config

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = ImageCompressionDemo
TEMPLATE = app


SOURCES += main.cpp\
mainwindow.cpp \
cqtopencvviewergl.cpp

HEADERS += mainwindow.h \
cqtopencvviewergl.h
FORMS +=

RESOURCES += \
resources.qrc

packagesExist(opencv) {
CONFIG += link_pkgconfig
PKGCONFIG += opencv
DEFINES += USING_OPENCV
} else {
message(Cannot build! Install OpenCV package.)
}
Edited Date: 2016-12-08 01:01 am (UTC)
From: [identity profile] fatoff.livejournal.com
Применимость package в моём понимании - подключаемость библиотеки без манипулирования индивидуальными путями доступа к хидерам и либам. Отлично работает. Самому билдить packages удовольствие ещё то, но бывает нужно. Стараюсь избегать ненужного билда, по крайней мере, на начальной стадии разработки. Подключил, попробовал. Далее, в проекте есть нормально подключенный пакет, а как там наш мастер билд системы Yocto решит, то уже потом.
From: [identity profile] fatoff.livejournal.com
> Долго не мог понять, почему кросс-компиляция пакета, который зависит от libpcap приводит к тому, что включаются заголовочные файлы из хоста (/usr/include вместо локальных для кросс-компиляции).

Имеется вышеозначенная проблема. А готовый пакет есть? Но если абсолютно необходимо *сейчас* компилировать, другое дело.
From: [identity profile] fatoff.livejournal.com
Теперь яснее. Моё внимание скипануло у libpcap нет описания для pkgconfig.
From: [identity profile] fatoff.livejournal.com
Собственно необходимость делать то, что ты делаешь, была неочевидной для меня.

Ну тупой, ну да. Только не о панацее же я. А о том, что лучше IMHO в котексте cmake/qmake, и как оно вообще имеет отношение к данному треду. Поддержал vaddimka.

Profile

dememax

May 2023

S M T W T F S
 123456
78910111213
14151617181920
21 2223 24252627
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 3rd, 2026 02:46 pm
Powered by Dreamwidth Studios