ALT Linux Team development discussions
 help / color / mirror / Atom feed
* [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