* [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
[parent not found: <20041130160323.10a43937.const@altlinux.ru>]
* [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