LINUX.ORG.RU

gentoo, можно ли узнать каким компилятором был собран пакет?

 , ,


1

3

$subject, предположим что в системе установленно 2 gcc или вообще (clang и gcc) известно что emerge -e world компилятором по умолчанию не делался. Можно узнать каким именно компилятором был собран пакет? Спасибо.


теоретически можно.

Иногда программы содержат информацию об использованном для сборки компиляторе в выхлопе --help, -v --version или окошке About

Либо по разным косвенным признакам, служебной информации, особенностям сгенерированного кода и т.д.

Harald ★★★★★
()

Открой бинарник в текстовом редакторе, ГЦЦ иногда вставляет информацию про себя.

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

/var/lib/portage/world - тут пакеты из world

/var/db/pkg/ - тут вся информация

man portage

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

Открой бинарник в текстовом редакторе, ГЦЦ иногда вставляет информацию про себя.

Я тоже так думал, пока не попробовал:

$ cat 1.c
#include <stdio.h>

int main()
{
	puts("Hello world!");
	return 0;
}
$ clang -o clang 1.c && strings clang | sort > clang.txt
$ gcc -o gcc 1.c && strings gcc | sort > gcc.txt
$ diff -u gcc.txt clang.txt
--- gcc.txt	2012-08-21 18:39:51.181892265 +0400
+++ clang.txt	2012-08-21 18:39:51.154892265 +0400
@@ -6,5 +6,5 @@
 libc.so.6
 __libc_start_main
 /lib/ld-linux.so.2
-PTRh`
+PTRh
 puts

red_eyed_peguin
()

насколько я помню выпилили. раньше в var/db/ было явно.

qnikst ★★★★★
()
Ответ на: комментарий от red_eyed_peguin
[c0_c4] ~/tmp$ cat 1.c 
#include <stdio.h>

int main()
{
	puts("Hello world!");
	return 0;
}

[c0_c4] ~/tmp$ gcc -o gcc 1.c && objdump -s gcc  | grep -i gcc
gcc:     file format elf64-x86-64
 0000 4743433a 2028474e 55292034 2e362e32  GCC: (GNU) 4.6.2
 0020 6c656173 65290047 43433a20 28474e55  lease).GCC: (GNU
cx ★★
()
Ответ на: комментарий от red_eyed_peguin
c0@c3 ~$ clang -o clang 1.c

c0@c3 ~$ strings -a clang | grep -i clang
Debian clang version 3.0-6 (tags/RELEASE_30/final) (based on LLVM 3.0)

c0@c3 ~$ objdump -s clang | grep -i clang -A 2
clang:     file format elf64-x86-64

Contents of section .interp:
--
 0010 616e2063 6c616e67 20766572 73696f6e  an clang version
 0020 20332e30 2d362028 74616773 2f52454c   3.0-6 (tags/REL
 0030 45415345 5f33302f 66696e61 6c292028  EASE_30/final) (
cx ★★
()

readelf -p .comment /path/to/binary

wota ★★
()
Ответ на: комментарий от cx
$ objdump -s $(which bash) |grep -i -E 'gcc|clang|icc'
$
wota
$ readelf -p .comment $(which bash)
readelf: Warning: Section '.comment' was not dumped because it does not exist!

Гента, настройки линкера дефолтные.

tides
()

/me запилил следующее в /etc/portage/bashrc

post_pkg_postinst(){
gcc --version | head -n1 > /var/db/pkg/${CATEGORY}/${PN}-${PVR}/GCC_VERSION
}
если файла нет ---> пакет собран с неgcc
мне хватает

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

strings ..

Это ни разу не прув для отсутствия инфы.

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

Гента, настройки линкера дефолтные.

стрипнутый бинарник

wota ★★
()

FEATURES=«nostrip» emerge -e world. Только бинарники распухнут, решение megabaks лучше

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

формально это неверно, хотя решение интересное, кстати я вроде писал на ЛОР официальный ответ по этому поводу.

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

$(CC) можно ж переопределить, и не уверен, что tc-get не может в выдать другую версию gcc отличную от текущей. Но 95% случаев этот хук точно покрывает.

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

$CC тут не используется
а вызов gcc происходит с учётом $ROOTPATH, овер которую я и переключаю версию gcc для капризных пакетов, не затрагивая соседние
так что работает
по крайней мере у меня
а менять $CC просто глупо (имхо) - частенько при сборке вызывается именно gcc, а не желаемый {O}CC

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