|
Namazu for hns による簡易全文検索 詳しくは 詳細指定/ヘルプを参照して下さい |
|||||||||||||||||||||||||||||||||||||||||||||||
2004年09月26日(日) 旧暦 [n年日記]更新: "2004/09/27 23:57:57"#1 [NetBSD][build.sh] SHLIB_LINK 問題
8/28 の覚え。
@ grep SHLIB_LINK t-[s,n]*:ttyp4:makoto@st4200 17:12:58/040926(...checkout/src)> \と入力して表示されるものを見て考えてみた。 @ SHLIB_LINK= の行がない時 (TNF):
行がない時には、
gnu/dist/gcc/gcc/config/t-slibgcc-elf-ver
にある次の定義が生きる。
SHLIB_LINK = $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \
-Wl,--soname=$(SHLIB_SONAME) \
-Wl,--version-script=$(SHLIB_MAP) \
-o $(SHLIB_NAME) @multilib_flags@ $(SHLIB_OBJS) $(SHLIB_LC) && \
rm -f $(SHLIB_SOLINK) && \
$(LN_S) $(SHLIB_NAME) $(SHLIB_SOLINK)
こちらは signal 11 (ただし見聞のみ)
@ SHLIB_LINK= の行がある時 (nandra):
SHLIB_LINK= の行がある時には、
この定義が空になり
# Disable SHLIB_LINK if shared libgcc not enabled.という場合になる。そうして、_Unwind_GetIP 問題、つまり libstdc++.so: undefined reference to `_Unwind_GetIP'という問題になる。 関連記事: tech-pkg, 2004/02/29 例えば libgcc という名前は src/gnu/lib/libgcc3 の下の 次のところにある。 ttype:makoto@harry 18:10:13/040926(...lib/libgcc3)> find . -name libgcc\* -ls 512 Sep 12 23:48 ./libgcc 53110 Sep 12 23:57 ./libgcc/obj/libgcc.a 59188 Sep 12 23:57 ./libgcc/obj/libgcc_p.a 54310 Sep 12 23:57 ./libgcc/obj/libgcc_pic.a 512 Sep 12 23:48 ./libgcc_eh 38752 Sep 12 23:58 ./libgcc_eh/obj/libgcc_eh.a 41364 Sep 12 23:58 ./libgcc_eh/obj/libgcc_eh_p.a 33622 Sep 12 23:58 ./libgcc_eh/obj/libgcc_eh_pic.a 512 Sep 12 23:48 ./libgcc_s 79194 Sep 12 23:58 ./libgcc_s/obj/libgcc_s_pic.a 43112 Sep 12 23:58 ./libgcc_s/obj/libgcc_s.so.1.0 1148 Sep 12 23:58 ./libgcc_s/obj/libgcc.map 15 Sep 12 23:58 ./libgcc_s/obj/libgcc_s.so.1 -> libgcc_s.so.1.0 15 Sep 12 23:58 ./libgcc_s/obj/libgcc_s.so -> libgcc_s.so.1.0この中で、件の定義は、次の中にある。 ttype:makoto@harry 18:12:19/040926(...lib/libgcc3)> nm libgcc_s/obj/libgcc_s.so.1.0 | grep -i unwind_getipこれは src/destdir.macppc/lib/ の下には写されていない。 src/gnu/lib/Makefile の中に次の文がある。 .if ${MKGCC} != "no"この libgcc3 の行があるところに行くためには: MKGCC=no でなくて、HAVE_GCC3 == no でないこと。 つまり /etc/mk.conf に次のように書いておく MKGCC=yes HAVE_GCC3=yes(いま読直すと、全然論理が合っていない...上の設定は初期値か..多分) /usr/share/mk/bsd.own.mk に、次の行がある。 /usr/share/mk/bsd.own.mk:HAVE_GCC3?= yesつまり初期値。 libgcc_s.so.1.0 を使わずに _Unwind_GetIP 問題を解決する必要がある .. @ ./libgcc3/libgcc_eh/obj/libgcc_eh.a:ttype:makoto@harry 18:56:19/040926(...gnu/lib)> nm ./libgcc3/libgcc_eh/obj/libgcc_eh.a | grep -i unwind_getipこれを使う。その方法は
@ gnu/dist/gcc/gcc/gcc.c にそれらしいコードが:
1561 /* Transform the extant libgcc_spec into one that uses the shared libgcc
1562 when given the proper command line arguments. */
1563 while (*p)
1564 {
1565 if (in_sep && *p == '-' && strncmp (p, "-lgcc", 5) == 0)
1566 {
1567 init_gcc_specs (&obstack,
1568 #ifdef NO_SHARED_LIBGCC_MULTILIB
1569 "-lgcc_s"
1570 #else
1571 "-lgcc_s%M"
1572 #endif
1573 ,
1574 "-lgcc",
1575 "-lgcc_eh"
1576 #ifdef USE_LIBUNWIND_EXCEPTIONS
1577 " -lunwind"
1578 #endif
1579 );
1580
1581 p += 5;
1582 in_sep = 0;
1583 }
1584 else if (in_sep && *p == 'l' && strncmp (p, "libgcc.a%s", 10) == 0)
1585 {
1586 /* Ug. We don't know shared library extensions. Hope that
1587 systems that use this form don't do shared libraries. */
1588 init_gcc_specs (&obstack,
1589 #ifdef NO_SHARED_LIBGCC_MULTILIB
1590 "-lgcc_s"
1591 #else
1592 "-lgcc_s%M"
1593 #endif
1594 ,
1595 "libgcc.a%s",
1596 "libgcc_eh.a%s"
1597 #ifdef USE_LIBUNWIND_EXCEPTIONS
1598 "libunwind.a%s"
1599 #endif
1600 );
1601 p += 10;
1602 in_sep = 0;
1603 }
-lgcc であれば、内部的に -lgcc_s や -lgcc_eh に書換えてくれる ?
1.7 (2/25/2004)
で変更されている。... これを特に書戻したりはしていない ...
最初の問題を見直す:
# link grodvi/grodvistrings して見ると、この c++ には eh が出て来ない。-lgcc も指定していない ? このようなものはいかがだろうか ? cvs diff -u gnu/dist/gcc/gcc/cp/g++spec.c Index: gnu/dist/gcc/gcc/cp/g++spec.c =================================================================== RCS file: /export/20040820/Repository/src/gnu/dist/gcc/gcc/cp/g++spec.c,v retrieving revision 1.1.1.1 diff -u -u -r1.1.1.1 g++spec.c --- gnu/dist/gcc/gcc/cp/g++spec.c 26 Sep 2004 07:18:49 -0000 1.1.1.1 +++ gnu/dist/gcc/gcc/cp/g++spec.c 26 Sep 2004 12:52:24 -0000 @@ -37,10 +37,10 @@ #endif #ifndef LIBSTDCXX -#define LIBSTDCXX "-lstdc++" +#define LIBSTDCXX "-lstdc++ -lgcc -lgcc_eh" #endif #ifndef LIBSTDCXX_PROFILE -#define LIBSTDCXX_PROFILE "-lstdc++" +#define LIBSTDCXX_PROFILE "-lstdc++ -lgcc -lgcc_eh" #endif void ttyp5:makoto@st4200 22:01:09/040926(...checkout/src)> @ cannot find -lstdc++ -lgcc:/export/20040820/checkout/src/obj/tooldir.NetBSD-2.0G-powerpc/lib/gcc-lib/powerpc--netbsd/3.3.3/ ../../../../powerpc--netbsd/bin/ld: cannot find -lstdc++ -lgcc -lgcc_eh ( つっこみ )
|
最近の日記 2025年12月25日 ・pbulk 11.99.3 (emacs30) 2025年11月22日 ・crash dump 2025年10月25日 ・recover from disk error 2025年10月23日 ・dd does not duplicate Windows 11 boot disk ? 2025年10月13日 ・missing package | ||