LINUX.ORG.RU
ФорумAdmin

Как работает pkg-config в случае multilib?

 , ,


0

2

Есть разные директории:
/usr/lib/
/usr/lib64/
/usr/libx32/

Первые две директории описаны тут
Последняя директория нужна для архитектуры x32

В интернете советуют:

To see where pkg-config (version 0.24 or later) searches for installed libraries by default, use the following command:

$ pkg-config --variable pc_path pkg-config
/usr/lib64/pkgconfig:/usr/share/pkgconfig 

И если с директорией /usr/share/pkgconfig вопросов нет - она платформонезависимая, то вот с первой директорией вопросы есть.

Как будет работать .ebuild, который опирается на automake, которая использует pkg-config, в случае установки для нескольких платформ (x64, x32)? Ведь pkg-config один на всех и установлен он в /usr/bin.

У меня собран pkg-config только для ABI_X86="64", поэтому в системе присутствует только x86_64-pc-linux-gnu-pkg-config, но думаю, если собрать с ABI_X86="32 64", то будет аналогичная для x86_32

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

И что? симлинк-то один.

Тем более и не симлинк он:

$ file /usr/bin/pkg-config
/usr/bin/pkg-config: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, stripped

Einstok_Fair ★★☆ ()
Последнее исправление: Einstok_Fair (всего исправлений: 1 )
Ответ на: комментарий от eternal_sorrow
[ebuild   R    ] dev-util/pkgconfig-0.29.2::gentoo  USE="-hardened -internal-glib" ABI_X86="32 (64) (-x32)" 1 970 KiB
...
$ equery files pkgconfig
 * Searching for pkgconfig ...
 * Contents of dev-util/pkgconfig-0.29.2:
/usr
/usr/bin
/usr/bin/i686-pc-linux-gnu-pkg-config
/usr/bin/pkg-config
/usr/bin/x86_64-pc-linux-gnu-pkg-config
/usr/lib
/usr/share
/usr/share/aclocal
/usr/share/aclocal/pkg.m4
/usr/share/doc
/usr/share/doc/pkgconfig-0.29.2
/usr/share/doc/pkgconfig-0.29.2/AUTHORS.bz2
/usr/share/doc/pkgconfig-0.29.2/NEWS.bz2
/usr/share/doc/pkgconfig-0.29.2/README.bz2
/usr/share/doc/pkgconfig-0.29.2/html
/usr/share/doc/pkgconfig-0.29.2/html/pkg-config-guide.html
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/pkg-config.1.bz2

У меня не получается включить x32, дописал

$ grep "ABI_X86" /etc/portage/make.conf 
ABI_X86="64 x32 32"
но нет, при выполнении команды emerge всё равно показывает (-x32)

Einstok_Fair ★★☆ ()

``` env PKG_CONFIG_PATH=/usr/lib32/pkgconfig PKG_CONFIG_ALLOW_SYSTEM_LIBS=1 pkg-config --libs zlib ```

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

Я сам решу что он мне не нужен, сразу после того, как получится его собрать.
так тоже не хочет:
USE=«abi_x86_32» emerge -av pkgconfig

Einstok_Fair ★★☆ ()
Ответ на: комментарий от eternal_sorrow

если ты не можешь X, тебе не надо Y

Это неправильно. Правильно так:
Если ты не можешь X, но очень хочешь X, тебе надо научиться делать X

Einstok_Fair ★★☆ ()
Ответ на: комментарий от eternal_sorrow

Конечно, раз в ядре сделали одновременно x64 и x32, значит и гента тоже должна так уметь.

Попробовал с буквой x:
# USE=abi_x86_x32 emerge -av pkgconfig
это не помогло:
[ebuild U *] dev-util/pkgconfig-9999::gentoo [0.29.2::gentoo] USE="-hardened -internal-glib" ABI_X86="(64) -32* (-x32)" 0 KiB

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

в ядре сделали одновременно x64 и x32

Меня терзают смутные сомнения. Ты точно понимаешь, что такое x86_64, x86_32 и x86_x32 и в чём между ними разница?

ABI_X86="(64) -32* (-x32)"

добавь в файл /etc/portage/profile/package.use.mask строку

dev-util/pkgconfig ABI_X86: -x32
eternal_sorrow ★★★★★ ()
Последнее исправление: eternal_sorrow (всего исправлений: 2 )
Ответ на: комментарий от eternal_sorrow

1) я прочитал страницу
https://wiki.gentoo.org/wiki//etc/portage/profile/package.use.mask

(и надо сказать, что ничего не понял)

Я не понял, что значит «убирать флаг» (remove USE)
я не понял, как тут поможет "-x32" (т.е. почему, например не просто x32)

2) Вобщем, я вписал эту строку:

# cat /etc/portage/profile/package.use.mask/00-sabayon.mask 
kde-base/solid -networkmanager

# http://bugs.sabayon.org/show_bug.cgi?id=4115
media-sound/audacity -ffmpeg

# USE=systemd unmasking, no need to keep them masked
sys-auth/polkit -systemd
sys-power/upower -systemd
sys-fs/udisks -systemd

# We use a builtin module for sys-fs/zfs
sys-fs/zfs -kernel-builtin

# добавь в файл /etc/portage/profile/package.use.mask строку
dev-util/pkgconfig ABI_X86: -x32

И теперь оно мне говорит:

The following USE changes are necessary to proceed:
 (see "package.use" in the portage(5) man page for more details)
# required by pkgconfig (argument)
>=dev-util/pkgconfig-0.29.2 -abi_x86_x32

Would you like to add these changes to your config files? [Yes/No]

Мне кажется, что что-то пошло не так, ведь мне нужно +abi_x86_x32? а не -abi_x86_x32

Einstok_Fair ★★☆ ()
Последнее исправление: Einstok_Fair (всего исправлений: 1 )
Ответ на: комментарий от Einstok_Fair

отказывается ставить с этим флагом. кто то по зависимости подтягивает pkgconfig именно с -x32. скорее всего virtual/pkgconfig. для него нужно аналогичную процедуру провести.

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

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

скорее всего virtual/pkgconfig

Нет, я его размёржил уже раньше.

ты пытаешься выстрелить себе в ногу

Если очень хочется, то можно.

Einstok_Fair ★★☆ ()
Последнее исправление: Einstok_Fair (всего исправлений: 1 )
Ответ на: комментарий от eternal_sorrow

для него нужно аналогичную процедуру провести

провёл:

# добавь в файл /etc/portage/profile/package.use.mask строку
dev-util/pkgconfig ABI_X86: -x32
virtual/pkgconfig ABI_X86: -x32
ничего не поменялось

ну тогда кто то другой

может ли такое быть?

Ведь когда я давал команду emerge pkgconfig, то действительно мог мёржиться virtual/pkgconfig. Но сейчас-то я точно мержу
emerge -av dev-util/pkgconfig

т.е. если кто-то что-то там и требует, то я же его не трогаю. Ставлю ровно один пакет, именно этот.

Einstok_Fair ★★☆ ()
Последнее исправление: Einstok_Fair (всего исправлений: 1 )
Ответ на: комментарий от Einstok_Fair

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

eternal_sorrow ★★★★★ ()
Ответ на: комментарий от eternal_sorrow
# emerge -pc dev-util/pkgconfig

Calculating dependencies... done!
>>> Calculating removal order...

>>> These are the packages that would be unmerged:

 dev-util/pkgconfig
    selected: 0.29.2 
   protected: none 
     omitted: none 

All selected packages: =dev-util/pkgconfig-0.29.2

>>> 'Selected' packages are slated for removal.
>>> 'Protected' and 'omitted' packages will not be removed.

Packages installed:   2244
Packages in world:    849
Packages in system:   43
Required packages:    2243
Number to remove:     1
Einstok_Fair ★★☆ ()
Ответ на: комментарий от Einstok_Fair

попробуй смерджить pkgconfig с --autounmask=n и покажи, на что ругнётся

eternal_sorrow ★★★★★ ()
Ответ на: комментарий от Einstok_Fair
$ equery depends dev-util/pkgconfig
 * These packages depend on dev-util/pkgconfig:
virtual/pkgconfig-1 (>=dev-util/pkgconfig-0.29.2[...])
$ equery depends virtual/pkgconfig
 * These packages depend on virtual/pkgconfig:
...
#тут охрненный список из установленных пакетов
...

Ты из какой реальности пишешь?

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

да, так всё и было, снёс через --unmerge.

Вобщем, после добавления нескольких строчек про ABI, теперь как-то так:

These are the packages that would be merged, in order:

Calculating dependencies  ... . . ... done!
[ebuild   R    ] dev-libs/libpcre-8.43:3::gentoo  USE="bzip2 cxx jit pcre16 readline recursion-limit (split-usr%*) static-libs (unicode) zlib -libedit -pcre32" ABI_X86="32 (64) x32*" 1 540 KiB
[ebuild     U  ] sys-apps/util-linux-2.34-r2::gentoo [2.33.2::gentoo] USE="cramfs ncurses nls pam python readline (split-usr%*) static-libs suid systemd tty-helpers udev unicode -build -caps* -fdformat -hardlink% -kill (-selinux) -slang -test" ABI_X86="32 (64) x32*" PYTHON_TARGETS="python2_7 python3_6 -python3_5 -python3_7" 4 859 KiB
[ebuild  N     ]  virtual/pkgconfig-1::gentoo  ABI_X86="32 (64) x32" 0 KiB
[ebuild  N     ]   dev-util/pkgconfig-0.29.2::gentoo  USE="-hardened -internal-glib" ABI_X86="32 (64) x32" 1 970 KiB
[ebuild     U  ]    dev-libs/glib-2.60.6:2::gentoo [2.58.3-r1:2::gentoo] USE="dbus (mime) static-libs xattr -debug (-fam) -gtk-doc (-selinux) -systemtap -test -utils" ABI_X86="32 (64) x32*" 4 482 KiB

Total: 5 packages (2 upgrades, 2 new, 1 reinstall), Size of downloads: 12 850 KiB

 * Error: circular dependencies:

(dev-libs/glib-2.60.6:2/2::gentoo, ebuild scheduled for merge) depends on
 (virtual/pkgconfig-1:0/0::gentoo, ebuild scheduled for merge) (buildtime)
  (dev-util/pkgconfig-0.29.2:0/0::gentoo, ebuild scheduled for merge) (runtime)
   (dev-libs/glib-2.60.6:2/2::gentoo, ebuild scheduled for merge) (buildtime)

It might be possible to break this cycle
by applying the following change:
- dev-util/pkgconfig-0.29.2 (Change USE: +internal-glib)

# USE=«internal-glib» emerge -av1 dev-util/pkgconfig --autounmask=n

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild  N     ] dev-util/pkgconfig-0.29.2::gentoo  USE="internal-glib -hardened" ABI_X86="32 (64) x32" 1 970 KiB

Total: 1 package (1 new), Size of downloads: 1 970 KiB

# equery files dev-util/pkgconfig
 * Searching for pkgconfig in dev-util ...
 * Contents of dev-util/pkgconfig-0.29.2:
/usr
/usr/bin
/usr/bin/i686-pc-linux-gnu-pkg-config
/usr/bin/pkg-config
/usr/bin/x86_64-pc-linux-gnu-pkg-config
/usr/lib
/usr/lib/debug
/usr/lib/debug/usr
/usr/lib/debug/usr/bin
/usr/lib/debug/usr/bin/i686-pc-linux-gnu-pkg-config.debug
/usr/lib/debug/usr/bin/pkg-config.debug
/usr/lib/debug/usr/bin/x86_64-pc-linux-gnu-pkg-config.debug
/usr/share
/usr/share/aclocal
/usr/share/aclocal/pkg.m4
/usr/share/doc
/usr/share/doc/pkgconfig-0.29.2
/usr/share/doc/pkgconfig-0.29.2/AUTHORS.bz2
/usr/share/doc/pkgconfig-0.29.2/NEWS.bz2
/usr/share/doc/pkgconfig-0.29.2/README.bz2
/usr/share/doc/pkgconfig-0.29.2/html
/usr/share/doc/pkgconfig-0.29.2/html/pkg-config-guide.html
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/pkg-config.1.bz2
/usr/src
/usr/src/debug
/usr/src/debug/dev-util
/usr/src/debug/dev-util/pkgconfig-0.29.2
/usr/src/debug/dev-util/pkgconfig-0.29.2/.keepdir

Смотрю, и не вижу тут выполняемого файла для x32

Einstok_Fair ★★☆ ()
Ответ на: комментарий от eternal_sorrow

нет, фича это
dev-util/pkgconf
pkg-config compatible replacement with no dependencies other than ANSI C89

вот даже не знаю, пробовать ставить, или разбираться как написан pkgconfig

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

[ebuild R ] dev-util/pkgconf-1.6.3:0/3::gentoo USE=«pkg-config -test» ABI_X86=«32 (64) x32» 0 KiB

# equery files pkgconf
 * Searching for pkgconf ...
 * Contents of dev-util/pkgconf-1.6.3:
/usr
/usr/bin
/usr/bin/i686-pc-linux-gnu-pkg-config -> i686-pc-linux-gnu-pkgconf
/usr/bin/i686-pc-linux-gnu-pkgconf
/usr/bin/pkg-config -> x86_64-pc-linux-gnu-pkg-config
/usr/bin/pkgconf -> x86_64-pc-linux-gnu-pkgconf
/usr/bin/x86_64-pc-linux-gnu-pkg-config -> x86_64-pc-linux-gnu-pkgconf
/usr/bin/x86_64-pc-linux-gnu-pkgconf
/usr/include
/usr/include/pkgconf
/usr/include/pkgconf/libpkgconf
/usr/include/pkgconf/libpkgconf/bsdstubs.h
/usr/include/pkgconf/libpkgconf/iter.h
/usr/include/pkgconf/libpkgconf/libpkgconf-api.h
/usr/include/pkgconf/libpkgconf/libpkgconf.h
/usr/include/pkgconf/libpkgconf/stdinc.h
/usr/lib
/usr/lib/debug
/usr/lib/debug/usr
/usr/lib/debug/usr/bin
/usr/lib/debug/usr/bin/i686-pc-linux-gnu-pkgconf.debug
/usr/lib/debug/usr/bin/x86_64-pc-linux-gnu-pkgconf.debug
/usr/lib/debug/usr/lib32
/usr/lib/debug/usr/lib32/libpkgconf.so.3.0.0.debug
/usr/lib/debug/usr/lib64
/usr/lib/debug/usr/lib64/libpkgconf.so.3.0.0.debug
/usr/lib32
/usr/lib32/libpkgconf.a
/usr/lib32/libpkgconf.so -> libpkgconf.so.3.0.0
/usr/lib32/libpkgconf.so.3 -> libpkgconf.so.3.0.0
/usr/lib32/libpkgconf.so.3.0.0
/usr/lib32/pkgconfig
/usr/lib32/pkgconfig/libpkgconf.pc
/usr/lib64
/usr/lib64/libpkgconf.a
/usr/lib64/libpkgconf.so -> libpkgconf.so.3.0.0
/usr/lib64/libpkgconf.so.3 -> libpkgconf.so.3.0.0
/usr/lib64/libpkgconf.so.3.0.0
/usr/lib64/pkgconfig
/usr/lib64/pkgconfig/libpkgconf.pc
/usr/share
/usr/share/aclocal
/usr/share/aclocal/pkg.m4
/usr/share/doc
/usr/share/doc/pkgconf-1.6.3
/usr/share/doc/pkgconf-1.6.3/AUTHORS.bz2
/usr/share/doc/pkgconf-1.6.3/NEWS.bz2
/usr/share/doc/pkgconf-1.6.3/README.md.bz2
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/pkg-config.1.bz2 -> pkgconf.1.bz2
/usr/share/man/man1/pkgconf.1.bz2
/usr/share/man/man5
/usr/share/man/man5/pc.5.bz2
/usr/share/man/man5/pkgconf-personality.5.bz2
/usr/share/man/man7
/usr/share/man/man7/pkg.m4.7.bz2
Einstok_Fair ★★☆ ()
Ответ на: комментарий от Einstok_Fair

1) я прочитал страницу
https://wiki.gentoo.org/wiki//etc/portage/profile/package.use.mask
(и надо сказать, что ничего не понял)

Нууу, мне сложно понять как ЕЩЕ более подробнее надо разжевывать, извини...

я не понял, как тут поможет "-x32"

Очень просто - в файле *.mask это СНЯТИЕ маскировки флага -x32. Соответственно чтобы включить флаг, тебе надо снять маскировку(-x32) в package.use.mask и включить сам флаг(+x32) в package.use

Логика тут простая - маскировка флага это действие обратное его включению(поэтому размаскировка - со знаком "-"). Более-того - это более высокоприоритетное действие(замаскированный флаг нельзя включить без размаскировки)

Кстати капитан очевидность напоминает, что флаг на самом деле не x32, а abi_x86_x32. Ибо USE_EXPAND.

Pinkbyte ★★★★★ ()
Последнее исправление: Pinkbyte (всего исправлений: 1 )
Ответ на: комментарий от Einstok_Fair

Я уже писал: pkg-config настраивается путем установки переменных среды. Тебе не нужен бинар для x32. При сборке происходит кросс-компиляция для нужного ABI.

$ man pkg-config

ENVIRONMENT VARIABLES
       PKG_CONFIG_PATH
              A colon-separated (on Windows, semicolon-separated) list of  directories  to  search
              for  .pc  files.   The default directory will always be searched after searching the
              path; the default is libdir/pkgconfig:datadir/pkgconfig where libdir is  the  libdir
              for pkg-config and datadir is the datadir for pkg-config when it was installed.

       PKG_CONFIG_LIBDIR
              Replaces  the  default  pkg-config  search   directory,   usually   /usr/lib/pkgcon‐
              fig:/usr/share/pkgconfig.

Вот как устанавливает портаж эти переменные среды

$ less eclass/multilib.eclass

# @FUNCTION: multilib_toolchain_setup
# @DESCRIPTION:
# Hide multilib details here for packages which are forced to be compiled for a
# specific ABI when run on another ABI (like x86-specific packages on amd64)
multilib_toolchain_setup() {
...
       	if [[ ${ABI} != ${DEFAULT_ABI} ]] ; then
...
               	export PKG_CONFIG_LIBDIR=${EPREFIX}/usr/$(get_libdir)/pkgconfig
               	export PKG_CONFIG_PATH=${EPREFIX}/usr/share/pkgconfig
       	fi
}

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

Значит кто-то тянет pkgconfig с флагом -abi_x86_x32. Судя по argument pkgconfig это скорее всего virtual/pkgconfig - у него ВНЕЗАПНО тоже есть флаги и они должны совпадать с любой реализацией, которую этот виртуальный пакет тянет.

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

Тебе не нужен бинар для x32.

Почему же? Он будет работать как x64, но использовать более короткие указатели.

Т.е. я верю, что можно обойтись без него и собрать при помощи x64, но у меня-то другой интерес.

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

Ты упоролся.

У тебя установлен gcc только для системного CHOST. Для других ABI происходит кросс-компиляция. Зачем тебе зоопарк неиспользуемого неродного тулчейна, если он не будет использоваться портажем?

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

ох, ладно, уговорил, речистый.

Буду использовать 64-х битный pkgconfig и разбираться, как мне продублировать функциональносять из multilib.eclass

У тебя установлен gcc только для системного CHOST.

Да я вообще не C-языки использую, и компилятор у меня свой, отдельный

Einstok_Fair ★★☆ ()
Последнее исправление: Einstok_Fair (всего исправлений: 1 )
Ответ на: комментарий от Einstok_Fair

ох, ладно, уговорил, речистый.

Молчал бы. Нафлудил не по делу, не дал никакой осмысленной информации, чтобы тебе могли помочь. Стоишь на своем, как упоротый баран. Занимаешься удалением системных библиотек и пишешь из альтернативной реальности. Приходится по косвенным признакам определять, чем ты болеешь, что себе отрезал, и как тебя вернуть из альтернативной реальности (ах, да, переустанови pkgconfig без USE=internal-glib).

Буду использовать 64-х битный pkgconfig и разбираться, как мне продублировать функциональносять из multilib.eclass

У тебя проблема не в pkg-config, у тебя проблема в не понимании чего ты сам хочешь, и тем более ты не можешь объяснить другим, что ты хочешь.

Да еще ты не умеешь читать. Точнее ты как бы просишь помощи, при этом полностью игнорируешь попытки тебе помочь. Полное неуважение к тем к кому ты обратился за помощью.

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

Вот только сейчас толкнул бессмысленную речь.

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

Да еще ты не умеешь читать. Точнее ты как бы просишь помощи, при этом полностью игнорируешь попытки тебе помочь. Полное неуважение к тем к кому ты обратился за помощью.

Это твоё мнение и оно отличается о моего (q)

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

ох, ладно, уговорил, речистый.

Так ты «уважительно» сказал «спасибо».

Полное неуважение к тем к кому ты обратился за помощью.

Я дал замечание.

Это твоё мнение и оно отличается о моего

Продолжаешь настаивать на своем мнении. Про это тоже я написал.

Спасибо, за внимание. Пожалуйста.

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

Так ты «уважительно» сказал «спасибо».

Моя логическая проблема не решилась. Просто я буду додумывать её дальше в параллельном мире.

Молчал бы.

Зато ты нахамить успел.

Einstok_Fair ★★☆ ()
Последнее исправление: Einstok_Fair (всего исправлений: 1 )
Ответ на: комментарий от Einstok_Fair

Моя логическая проблема не решилась.

При установке с нужным abi тоже бы не решилась. Потому что pkg-config по дефолту ищет /usr/lib/pkgconfig и /usr/share/pkgconfig (хотя это можно настроить при configure, для x86 это настраивается). Поэтому придется устанавливать эти переменные среды для неродной ABI (при кросс-компиляции). О чем я сразу написал Как работает pkg-config в случае multilib? (комментарий)

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

Ты даже не можешь объяснить зачем тебе abi=x32, кроме как выдуманных преждевременных оптимизаций. Возьми да поставь отдельно, проверь свои гипотезы в чистой среде (и обломись оптимизацей в пределах погрешности измерений). После займись интеграцией в основную систему.

Но нет, во всем виноваты помощники

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

ох, ладно, уговорил, речистый.

Молчал бы.

Зато ты нахамить успел.

Хамство, на хамство.

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