* [devel] slatec, fortran libraries, weak symbols
@ 2004-11-26 21:26 Alexey Tourbin
2004-11-26 21:30 ` Dmitry V. Levin
2004-11-29 5:35 ` Constantin Mikhaylenko
0 siblings, 2 replies; 8+ messages in thread
From: Alexey Tourbin @ 2004-11-26 21:26 UTC (permalink / raw)
To: devel
[-- Attachment #1: Type: text/plain, Size: 1261 bytes --]
Здравствуйте.
Библиотека slatec собирается так:
for f in *.f; do g77 -c %optflags %optflags_shared "$f"; done
g77 -shared -o lib%name.so.%version -Wl,-soname=lib%name.so.%version *.o
echo 'main(){}' >ldtest.c
gcc ldtest.c lib%name.so.%version
В результате получается:
+ gcc ldtest.c libslatec.so.4.1
libslatec.so.4.1: undefined reference to `dgvec_'
libslatec.so.4.1: undefined reference to `uvec_'
libslatec.so.4.1: undefined reference to `uivp_'
libslatec.so.4.1: undefined reference to `duvec_'
libslatec.so.4.1: undefined reference to `duivp_'
libslatec.so.4.1: undefined reference to `gvec_'
libslatec.so.4.1: undefined reference to `dfmat_'
libslatec.so.4.1: undefined reference to `fmat_'
collect2: ld returned 1 exit status
При изучения исходников выяснилось следующее (цитирую из dbvsup.f):
C The user must supply subroutines DFMAT, DGVEC, DUIVP and DUVEC,
C when needed (they must be so named), to evaluate the derivatives
C as follows
C
C A. DFMAT must be supplied.
Т.е. функции, которые должны быть определены пользователем, на практике
оборачиваются undefined references в библиотеке. Подозреваю, что эта
проблема может быть решена с помощью weak symbols. Кто-нибудь знает,
как именно?
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [devel] slatec, fortran libraries, weak symbols
2004-11-26 21:26 [devel] slatec, fortran libraries, weak symbols Alexey Tourbin
@ 2004-11-26 21:30 ` Dmitry V. Levin
2004-11-29 5:35 ` Constantin Mikhaylenko
1 sibling, 0 replies; 8+ messages in thread
From: Dmitry V. Levin @ 2004-11-26 21:30 UTC (permalink / raw)
To: ALT Devel discussion list
[-- Attachment #1: Type: text/plain, Size: 688 bytes --]
On Sat, Nov 27, 2004 at 12:26:49AM +0300, Alexey Tourbin wrote:
[...]
> При изучения исходников выяснилось следующее (цитирую из dbvsup.f):
>
> C The user must supply subroutines DFMAT, DGVEC, DUIVP and DUVEC,
> C when needed (they must be so named), to evaluate the derivatives
> C as follows
> C
> C A. DFMAT must be supplied.
>
> Т.е. функции, которые должны быть определены пользователем, на практике
> оборачиваются undefined references в библиотеке. Подозреваю, что эта
> проблема может быть решена с помощью weak symbols. Кто-нибудь знает,
> как именно?
На gcc это можно сделать так:
#pragma weak DFMAT
На g77 не пробовал.
--
ldv
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [devel] slatec, fortran libraries, weak symbols
2004-11-26 21:26 [devel] slatec, fortran libraries, weak symbols Alexey Tourbin
2004-11-26 21:30 ` Dmitry V. Levin
@ 2004-11-29 5:35 ` Constantin Mikhaylenko
2004-11-29 11:04 ` [devel] " Alexey Tourbin
1 sibling, 1 reply; 8+ messages in thread
From: Constantin Mikhaylenko @ 2004-11-29 5:35 UTC (permalink / raw)
To: ALT Devel discussion list
[-- Attachment #1: Type: text/plain, Size: 891 bytes --]
On Sat, 27 Nov 2004 00:26:49 +0300
Alexey Tourbin <at@altlinux.ru> wrote:
> Здравствуйте.
> Библиотека slatec собирается так:
>
> for f in *.f; do g77 -c %optflags %optflags_shared "$f"; done
> g77 -shared -o lib%name.so.%version -Wl,-soname=lib%name.so.%version *.o
man gcc
/soname
Pattern not found (press RETURN)
А без оного безобразия (таки вас не устраивает потом сказать ln -s bla-bla ?) у меня собирается безошибочно.
Давно хотел собрать slatec.
Если сильно не возражаете -- на этой неделе сделаю
(более менее свободен).
BW
Const
P.S.
Совершенно не понимаю смысла разделяемой билиотеки
для _такого_рода_ подпрограмм
--
Dr. Constantin I. Mikhaylenko | Institute of Mechanics
+7 (3472) 239537, 236446 | of Ufa's Branch of R.A.S.
const@anrb.ru | const@mail.ru | 12, K. Marx Str..
ICQ UIN: 13383705 (Const) | Ufa, 450000, RUSSIA
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
* [devel] Re: slatec, fortran libraries, weak symbols
2004-11-29 5:35 ` Constantin Mikhaylenko
@ 2004-11-29 11:04 ` Alexey Tourbin
2004-11-29 11:25 ` Constantin Mikhaylenko
0 siblings, 1 reply; 8+ messages in thread
From: Alexey Tourbin @ 2004-11-29 11:04 UTC (permalink / raw)
To: ALT Devel discussion list
[-- Attachment #1: Type: text/plain, Size: 899 bytes --]
On Mon, Nov 29, 2004 at 10:35:09AM +0500, Constantin Mikhaylenko wrote:
> > for f in *.f; do g77 -c %optflags %optflags_shared "$f"; done
> > g77 -shared -o lib%name.so.%version -Wl,-soname=lib%name.so.%version *.o
>
> man gcc
> /soname
> Pattern not found (press RETURN)
-Wl передает опции линкеру, поэтому надо искать в man ld.
> А без оного безобразия (таки вас не устраивает потом сказать ln -s bla-bla ?) у меня собирается безошибочно.
Что есть безобразие?
SONAME должен быть у всех разделяемых библиотек.
> Давно хотел собрать slatec.
> Если сильно не возражаете -- на этой неделе сделаю
> (более менее свободен).
>
> BW
> Const
>
> P.S.
> Совершенно не понимаю смысла разделяемой билиотеки
> для _такого_рода_ подпрограмм
Например, perl-PDL таскает вместе с собой некоторое подмножество
библиотеки slatec. А также посмотрте, как собран slatec в debian.
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [devel] Re: slatec, fortran libraries, weak symbols
2004-11-29 11:04 ` [devel] " Alexey Tourbin
@ 2004-11-29 11:25 ` Constantin Mikhaylenko
2004-11-29 12:51 ` Alexey Tourbin
0 siblings, 1 reply; 8+ messages in thread
From: Constantin Mikhaylenko @ 2004-11-29 11:25 UTC (permalink / raw)
To: ALT Devel discussion list
[-- Attachment #1: Type: text/plain, Size: 1636 bytes --]
On Mon, 29 Nov 2004 14:04:37 +0300
Alexey Tourbin <at@altlinux.ru> wrote:
> On Mon, Nov 29, 2004 at 10:35:09AM +0500, Constantin Mikhaylenko wrote:
> > > for f in *.f; do g77 -c %optflags %optflags_shared "$f"; done
> > > g77 -shared -o lib%name.so.%version -Wl,-soname=lib%name.so.%version *.o
> >
> > man gcc
> > /soname
> > Pattern not found (press RETURN)
>
> -Wl передает опции линкеру, поэтому надо искать в man ld.
Почитал. понял свою ошибку.
Поймал вашу. Надо:
gcc -shared -o lib%name.so.%version -Wl,-soname=lib%name.so.%version *.o
А фортран просто не умеет делать библиотеки.
> > А без оного безобразия (таки вас не устраивает потом сказать ln -s bla-bla ?) у меня собирается безошибочно.
>
> Что есть безобразие?
Мой словесный понос ;(
> SONAME должен быть у всех разделяемых библиотек.
Не то, чтобы должен...
в man ld сказано, что это _облегчает_ (видимо следует читать -- ускоряет) вызов библиотеки.
> > Давно хотел собрать slatec.
> > Если сильно не возражаете -- на этой неделе сделаю
> > (более менее свободен).
Надо понимать -- возражаете? ;)
> > BW
> > Const
> >
> > P.S.
> > Совершенно не понимаю смысла разделяемой билиотеки
> > для _такого_рода_ подпрограмм
>
> Например, perl-PDL таскает вместе с собой некоторое подмножество
> библиотеки slatec. А также посмотрте, как собран slatec в debian.
>
Ок. Убедили.
--
Dr. Constantin I. Mikhaylenko | Institute of Mechanics
+7 (3472) 239537, 236446 | of Ufa's Branch of R.A.S.
const@anrb.ru | const@mail.ru | 12, K. Marx Str..
ICQ UIN: 13383705 (Const) | Ufa, 450000, RUSSIA
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
* [devel] Re: slatec, fortran libraries, weak symbols
2004-11-29 11:25 ` Constantin Mikhaylenko
@ 2004-11-29 12:51 ` Alexey Tourbin
0 siblings, 1 reply; 8+ messages in thread
From: Alexey Tourbin @ 2004-11-29 12:51 UTC (permalink / raw)
To: ALT Devel discussion list
[-- Attachment #1: Type: text/plain, Size: 3988 bytes --]
On Mon, Nov 29, 2004 at 04:25:31PM +0500, Constantin Mikhaylenko wrote:
> Почитал. понял свою ошибку.
> Поймал вашу. Надо:
> gcc -shared -o lib%name.so.%version -Wl,-soname=lib%name.so.%version *.o
>
> А фортран просто не умеет делать библиотеки.
Не совсем так. g77, как и gcc -- это просто интерфейс к настоящему
препроцессору, компилятору, ассемблеру, линкеру и т.д. В этом смысле
и Си не умеет делать библиотеки.
$ strace -kqfF -e trace=execve -- g77 -c src/acosh.f
execve("/usr/bin/g77", ["g77", "-c", "src/acosh.f"], [/* 49 vars */]) = 0
execve("/usr/bin/ccache", ["i586-alt-linux-g77", "-c", "src/acosh.f"], [/* 49 vars */]) = 0
execve("/usr/bin/i586-alt-linux-g77", ["/usr/bin/i586-alt-linux-g77", "-c", "src/acosh.f"], [/* 50 vars */]) = 0
[pid 23788] --- SIGSTOP (Stopped (signal)) @ 0 (0) ---
[pid 23788] execve("/usr/lib/gcc-lib/i586-alt-linux/3.3.3/f771", ["/usr/lib/gcc-lib/i586-alt-linux/"..., "src/acosh.f", "-quiet", "-dumpbase", "acosh.f", "-auxbase", "acosh", "-o", "/home/at/tmp/cco93o9G.s"], [/* 52 vars */]) = 0
--- SIGCHLD (Child exited) @ 0 (0) ---
[pid 23789] --- SIGSTOP (Stopped (signal)) @ 0 (0) ---
[pid 23789] execve("/home/at/bin/as", ["as", "-Qy", "-o", "acosh.o", "/home/at/tmp/cco93o9G.s"], [/* 52 vars */]) = -1 ENOENT (No such file or directory)
[pid 23789] execve("/bin/as", ["as", "-Qy", "-o", "acosh.o", "/home/at/tmp/cco93o9G.s"], [/* 52 vars */]) = -1 ENOENT (No such file or directory)
[pid 23789] execve("/usr/bin/as", ["as", "-Qy", "-o", "acosh.o", "/home/at/tmp/cco93o9G.s"], [/* 52 vars */]) = 0
--- SIGCHLD (Child exited) @ 0 (0) ---
$
Здесь видно, что g77 на самом деле вызывает f771 (наподобие cc1) и /usr/bin/as.
(А также видно, что ccache не умеет кэшировать фортран).
$ strace -kqfF -e trace=execve -- g77 -shared -o libacosh.so.4 -Wl,-soname=libacosh.so.4 acosh.o
execve("/usr/bin/g77", ["g77", "-shared", "-o", "libacosh.so.4", "-Wl,-soname=libacosh.so.4", "acosh.o"], [/* 49 vars */]) = 0
execve("/usr/bin/ccache", ["i586-alt-linux-g77", "-shared", "-o", "libacosh.so.4", "-Wl,-soname=libacosh.so.4", "acosh.o"], [/* 49 vars */]) = 0
execve("/usr/bin/i586-alt-linux-g77", ["/usr/bin/i586-alt-linux-g77", "-shared", "-o", "libacosh.so.4", "-Wl,-soname=libacosh.so.4", "acosh.o"], [/* 50 vars */]) = 0
[pid 23800] --- SIGSTOP (Stopped (signal)) @ 0 (0) ---
[pid 23800] execve("/usr/lib/gcc-lib/i586-alt-linux/3.3.3/collect2", ["/usr/lib/gcc-lib/i586-alt-linux/"..., "--eh-frame-hdr", "-m", "elf_i386", "-shared", "-o", "libacosh.so.4", "/usr/lib/gcc-lib/i586-alt-linux/"..., "/usr/lib/gcc-lib/i586-alt-linux/"..., "-L/usr/lib/gcc-lib/i586-alt-linu"..., "-L/usr/lib/gcc-lib/i586-alt-linu"..., "-soname=libacosh.so.4", "acosh.o", "-lfrtbegin", "-lg2c", "-lm", ...], [/* 54 vars */]) = 0
[pid 23801] --- SIGSTOP (Stopped (signal)) @ 0 (0) ---
[pid 23801] execve("/usr/bin/ld", ["/usr/bin/ld", "--eh-frame-hdr", "-m", "elf_i386", "-shared", "-o", "libacosh.so.4", "/usr/lib/gcc-lib/i586-alt-linux/"..., "/usr/lib/gcc-lib/i586-alt-linux/"..., "-L/usr/lib/gcc-lib/i586-alt-linu"..., "-L/usr/lib/gcc-lib/i586-alt-linu"..., "-soname=libacosh.so.4", "acosh.o", "-lfrtbegin", "-lg2c", "-lm", ...], [/* 55 vars */]) = 0
[pid 23800] --- SIGCHLD (Child exited) @ 0 (0) ---
--- SIGCHLD (Child exited) @ 0 (0) ---
$
А здесь видно, как на самом деле вызывается /usr/bin/ld c аргументом -soname.
А также видно, что g77 дает указание линкеру подцепить библиотеки
-lfrtbegin и -lg2c, чего не сделал бы gcc (в результате появились бы
undefined symbols). По аналогии g++ -shared *.o неявно линкует с
-lstdc++.
> Не то, чтобы должен...
> в man ld сказано, что это _облегчает_ (видимо следует читать -- ускоряет) вызов библиотеки.
>
> > > Давно хотел собрать slatec.
> > > Если сильно не возражаете -- на этой неделе сделаю
> > > (более менее свободен).
>
> Надо понимать -- возражаете? ;)
Нет. Сам сомневаюсь. И непонятно пока, что делать с DGVEC и проч,
#prgma weak пока не помогает.
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
* [devel] Re: slatec, fortran libraries, weak symbols
@ 2004-11-30 14:57 ` Alexey Tourbin
2004-11-30 15:46 ` Dmitry V. Levin
0 siblings, 1 reply; 8+ messages in thread
From: Alexey Tourbin @ 2004-11-30 14:57 UTC (permalink / raw)
To: devel
[-- Attachment #1: Type: text/plain, Size: 496 bytes --]
On Tue, Nov 30, 2004 at 04:03:23PM +0500, Constantin Mikhaylenko wrote:
> Кто бы это сделал?
>
> =============================
> + /usr/lib/rpm/brp-alt
> Cleaning files in /home/const/tmp/slatec-buildroot (auto)
> find: warning: you have specified the -mindepth option after a non-option argument -type, but options are not positional (-mindepth affects tests specified before it as well as those specified after it). Please specify options before other arguments.
Кто бы это сделал?
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [devel] Re: slatec, fortran libraries, weak symbols
2004-11-30 14:57 ` Alexey Tourbin
@ 2004-11-30 15:46 ` Dmitry V. Levin
0 siblings, 0 replies; 8+ messages in thread
From: Dmitry V. Levin @ 2004-11-30 15:46 UTC (permalink / raw)
To: ALT Devel discussion list
[-- Attachment #1: Type: text/plain, Size: 783 bytes --]
On Tue, Nov 30, 2004 at 05:57:23PM +0300, Alexey Tourbin wrote:
> On Tue, Nov 30, 2004 at 04:03:23PM +0500, Constantin Mikhaylenko wrote:
> > Кто бы это сделал?
> >
> > =============================
> > + /usr/lib/rpm/brp-alt
> > Cleaning files in /home/const/tmp/slatec-buildroot (auto)
> > find: warning: you have specified the -mindepth option after a non-option argument -type, but options are not positional (-mindepth affects tests specified before it as well as those specified after it). Please specify options before other arguments.
>
> Кто бы это сделал?
Не обращай внимание, поскольку это всего лишь предупреждение,
которое будет исправлено в очередной сборке rpm-build.
В качестве обходного варианта могу предложить "nohup </dev/null".
--
ldv
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2004-11-30 15:46 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-11-26 21:26 [devel] slatec, fortran libraries, weak symbols Alexey Tourbin
2004-11-26 21:30 ` Dmitry V. Levin
2004-11-29 5:35 ` Constantin Mikhaylenko
2004-11-29 11:04 ` [devel] " Alexey Tourbin
2004-11-29 11:25 ` Constantin Mikhaylenko
2004-11-29 12:51 ` Alexey Tourbin
2004-11-30 14:57 ` Alexey Tourbin
2004-11-30 15:46 ` Dmitry V. Levin
ALT Linux Team development discussions
This inbox may be cloned and mirrored by anyone:
git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
public-inbox-index devel
Example config snippet for mirrors.
Newsgroup available over NNTP:
nntp://lore.altlinux.org/org.altlinux.lists.devel
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git