LINUX.ORG.RU

[Опять AltLinux] Где взять libm.a


0

0

Она в 4.0.3 (Desktop) есть вообще хоть где-то?

Такой тестовый пример:

% gcc -lm test.c -o test /home/marsijanin/tmp/ccEVfl6v.o: In function `main': test.c:(.text+0x21): undefined reference to `sin' collect2: выполнение ld завершилось с кодом возврата 1

% cat test.c #include <stdio.h> #include <math.h>

int main (void) { printf("%f\n", sin(1)); return 0; }

find /usr -iname "*libm.a*" ничего не находит.

Список установленных библиотек: % apt-cache pkgnames glibc glibc-nss glibc-locales-junior glibc-locales-virtual glibc-profile glibc-nss-debug glibc-debug glibc-devel glibc-devel-debug glibc-localedata glibc-core-archopt glibc-core-debug glibc-gconv-modules glibc-kernheaders glibc-preinstall glibc-locales glibc-i18ndata glibc-utils glibc glibc-core glibc-devel-static glibc-timezones

Вроде поставил всё, что только можно было из репов. Или что-то всётаки упустил? Или считается, что раз сертификат есть, то хе^Wкоомпиляцией страдать не недо?

anonymous

Re: [Опять AltLinux] Где взять libm.a

Установленные либы:

% apt-cache pkgnames glibc glibc-nss glibc-locales-junior glibc-locales-virtual glibc-profile glibc-nss-debug glibc-debug glibc-devel glibc-devel-debug glibc-localedata glibc-core-archopt glibc-core-debug glibc-gconv-modules glibc-kernheaders glibc-preinstall glibc-locales glibc-i18ndata glibc-utils glibc glibc-core glibc-devel-static glibc-timezones

anonymous ()
Ответ на: Re: [Опять AltLinux] Где взять libm.a от anonymous

Re: [Опять AltLinux] Где взять libm.a

% apt-cache pkgnames glibc
glibc-nss
glibc-locales-junior
glibc-locales-virtual
glibc-profile
glibc-nss-debug
glibc-debug
glibc-devel
glibc-devel-debug
glibc-localedata
glibc-core-archopt
glibc-core-debug
glibc-gconv-modules
glibc-kernheaders
glibc-preinstall
glibc-locales
glibc-i18ndata
glibc-utils
glibc
glibc-core
glibc-devel-static
glibc-timezones

anonymous ()

Re: [Опять AltLinux] Где взять libm.a

-lm к флагам сборки добавь

true_admin ★★★★★ ()
Ответ на: Re: [Опять AltLinux] Где взять libm.a от Sectoid

Re: [Опять AltLinux] Где взять libm.a

ой, проглядел что -lm уже есть.
Странно, у меня на убунте вообще без всяких либ собралось и заработало. При том что функции sin в lib.so.6 нету:

$ strace ./a.out 
execve("./a.out", ["./a.out"], [/* 31 vars */]) = 0
brk(0)                                  = 0x9040000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f47000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=54651, ...}) = 0
mmap2(NULL, 54651, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7f39000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/tls/i686/cmov/libc.so.6", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\340g\1"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=1425800, ...}) = 0
mmap2(NULL, 1431152, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7ddb000
mmap2(0xb7f33000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x158) = 0xb7f33000
mmap2(0xb7f36000, 9840, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb7f36000
close(3)                                = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7dda000
set_thread_area({entry_number:-1 -> 6, base_addr:0xb7dda6b0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0
mprotect(0xb7f33000, 8192, PROT_READ)   = 0
mprotect(0x8049000, 4096, PROT_READ)    = 0
mprotect(0xb7f64000, 4096, PROT_READ)   = 0
munmap(0xb7f39000, 54651)               = 0
fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 8), ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f46000
write(1, "0.841471\n", 90.841471
)               = 9
exit_group(0)                           = ?
Process 9146 detached


хз что там в альте :)

true_admin ★★★★★ ()
Ответ на: Re: [Опять AltLinux] Где взять libm.a от true_admin

Re: [Опять AltLinux] Где взять libm.a

Та же самая проблема в федоре. Они вообще выкинули *.a файлы из *-devel пакетов, а где их брать -- хз.

anonymous ()
Ответ на: Re: [Опять AltLinux] Где взять libm.a от true_admin

Re: [Опять AltLinux] Где взять libm.a

>Странно, у меня на убунте вообще без всяких либ собралось и заработало.

(with-telepat-mode Возможно пропатченный gcc-specs на предмет автоподключения libm?)

>При том что функции sin в lib.so.6 нету:

Её там и не должно быть. Она должна находится в libm.

Sectoid ★★★★★ ()
Ответ на: Re: [Опять AltLinux] Где взять libm.a от Sectoid

Re: [Опять AltLinux] Где взять libm.a

>http://www.sisyphus.ru/srpm/Sisyphus/glibc

>Установите пакет glibc-devel-static

Поставил glibc-devel-static, правда для 4.0, а не "сизифа"

% ls -l /usr/lib/libm.a                
-rw-r--r-- 1 root root 522040 Янв 25  2007 /usr/lib/libm.a

% gcc-4.1 -v -L/usr/lib -lm test.c -o test
Используются внутренние спецификации.
Целевая архитектура: i586-alt-linux
Параметры конфигурации: ../configure --host=i586-alt-linux --build=i586-alt-linux --target=i586-alt-linux --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib --libexecdir=/usr/libexec --localstatedir=/var/lib --sharedstatedir=/usr/com --mandir=/usr/share/man --infodir=/usr/share/info --disable-dependency-tracking --without-included-gettext --program-suffix=-4.1 --with-slibdir=/lib --enable-shared --enable-__cxa_atexit --enable-threads=posix --enable-checking=release --with-system-zlib --without-included-gettext --disable-multilib --enable-languages=c,c++,fortran,objc,obj-c++,treelang,java,ada --enable-java-awt=gtk --disable-plugin --with-native-libdir=/usr/lib/gcj-4.1 --enable-libgcj-multifile --with-cpu=i586 --with-arch=i586 --with-tune=pentium4
Модель многопотоковости: posix
gcc версия 4.1.1 20070105 (ALT Linux, build 4.1.1-alt11)
 /usr/libexec/gcc/i586-alt-linux/4.1.1/cc1 -D_FORTIFY_SOURCE=2 -quiet -v test.c -fstack-protector -quiet -dumpbase test.c -march=i586 -auxbase test -version -o /home/anonymous/tmp/cc11WHIy.s
несуществующий каталог "/usr/lib/gcc/i586-alt-linux/4.1.1/../../../../i586-alt-linux/include" проигнорирован
порядок поиска для #include "...":
порядок поиска для #include <...>:
 /usr/local/include
 /usr/lib/gcc/i586-alt-linux/4.1.1/include
 /usr/include
конец списка поиска
GNU C версия 4.1.1 20070105 (ALT Linux, build 4.1.1-alt11) (i586-alt-linux)
	скомпилировано GNU C версия 4.1.1 20070105 (ALT Linux, build 4.1.1-alt11).
эвристики GGC: --param ggc-min-expand=98 --param ggc-min-heapsize=128316
Compiler executable checksum: 47b67d78d2d55d8e46d637540ceaca3e
 as -V -Qy -o /home/anonymous/tmp/ccgsT8H0.o /home/anonymous/tmp/cc11WHIy.s
GNU assembler version 2.17.50.0.6 (i586-alt-linux) using BFD version 2.17.50.0.6 20061020
 /usr/libexec/gcc/i586-alt-linux/4.1.1/collect2 --as-needed --eh-frame-hdr -m elf_i386 --hash-style=gnu -dynamic-linker /lib/ld-linux.so.2 -o test /usr/lib/gcc/i586-alt-linux/4.1.1/../../../crt1.o /usr/lib/gcc/i586-alt-linux/4.1.1/../../../crti.o /usr/lib/gcc/i586-alt-linux/4.1.1/crtbegin.o -L/usr/lib -L/usr/lib/gcc/i586-alt-linux/4.1.1 -L/usr/lib/gcc/i586-alt-linux/4.1.1 -L/usr/lib/gcc/i586-alt-linux/4.1.1/../../.. -lm /home/anonymous/tmp/ccgsT8H0.o -lgcc --as-needed -lgcc_s -lc -lgcc --as-needed -lgcc_s /usr/lib/gcc/i586-alt-linux/4.1.1/crtend.o /usr/lib/gcc/i586-alt-linux/4.1.1/../../../crtn.o
/home/anonymous/tmp/ccgsT8H0.o: In function `main':
test.c:(.text+0x21): undefined reference to `sin'
collect2: выполнение ld завершилось с кодом возврата 1

anonymous ()

Re: [Опять AltLinux] Где взять libm.a

ln -s /lib/libm.so.6 /usr/lib/libm.so

и линкуйте с димнамической библиотекой, вот только в рантайме она ищется по суффиксу .so.major version (so.6 для компонентов libc) а линкер ищет просто .so

не забудьте ldconfig

после добавления симлинка

Sylvia ★★★★★ ()
Ответ на: Re: [Опять AltLinux] Где взять libm.a от mky

Re: [Опять AltLinux] Где взять libm.a

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

З.Ы. Начальство на радостях (от того, что у него ничего не собирается) чуть не снесло альта и водрузило за место него слаку.

marsijanin ★★ ()
Ответ на: Re: [Опять AltLinux] Где взять libm.a от marsijanin

Re: [Опять AltLinux] Где взять libm.a

>Начальство на радостях (от того, что у него ничего не собирается) чуть не снесло альта и водрузило за место него слаку.

Это было бы крайне разумным решением.

dn2010 ★★★★★ ()
Ответ на: Re: [Опять AltLinux] Где взять libm.a от Sylvia

Re: [Опять AltLinux] Где взять libm.a

> ln -s /lib/libm.so.6 /usr/lib/libm.so

Такое надо делать только в недодистрибутивах типа слаки, в нормальных должно всё работать без этого. Кстати упомянутый ldconfig сам расставляет правильные сслыки на so'шники.

libm.a нужен только для статической линковки. -lm надо добавить в конце.

Reset ★★★★★ ()
Ответ на: Re: [Опять AltLinux] Где взять libm.a от Reset

Re: [Опять AltLinux] Где взять libm.a

4.2 в слаке все есть

ldconfig ссылки на .so не делает только so.полная версия на .so.major_version

Sylvia ★★★★★ ()
Ответ на: Re: [Опять AltLinux] Где взять libm.a от Reset

Re: [Опять AltLinux] Где взять libm.a

>Такое надо делать только в недодистрибутивах типа слаки, в нормальных должно всё работать без этого. Кстати упомянутый ldconfig сам расставляет правильные сслыки на so'шники.

В Slackware оно работало как надо даже тогда, когда iplabs linux team ещё даже не начинала портить мандриву.

dn2010 ★★★★★ ()
Ответ на: Re: [Опять AltLinux] Где взять libm.a от GreyDoom

Re: [Опять AltLinux] Где взять libm.a

Если бы вместо каждого поста про недодистрибутив Slackware народ правил бы баг в своём дистрибутиве или собирал бы под него пакет, тогда у других дистрибутивов был бы шанс.

dn2010 ★★★★★ ()
Ответ на: Re: [Опять AltLinux] Где взять libm.a от www_linux_org_ru

Re: [Опять AltLinux] Где взять libm.a

Идите по ссылке в моем посте, потом по ссылкам из поста "anonymous (*) (10.05.2008 13:11:18)", --as-needed будет вашим ключевым словом.

mky ★★★★★ ()
Ответ на: Re: [Опять AltLinux] Где взять libm.a от Sectoid

Re: [Опять AltLinux] Где взять libm.a

> (with-telepat-mode Возможно пропатченный gcc-specs на предмет автоподключения libm?)

так я стрейс привёл из которого видно что libm не трогается вообще :). И вообще, у gcc много built-in функций.

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