+ -
当前位置:首页 → 问答吧 → 使用glibc 2.4,mozilla-firefox不能通过编译的请看![转贴]

使用glibc 2.4,mozilla-firefox不能通过编译的请看![转贴]

时间:2006-03-14

来源:互联网

转贴自:
http://forums.gentoo.org/viewtopic-t...t-mozilla.html

如果你使用glibc2.4可能会遇到以下的问题:
代码:
i686-pc-linux-gnu-g++ -o nsStackFrameUnix.o -c -I../../dist/include/system_wrappers -include ../../config/gcc_hidden.h -DMOZILLA_INTERNAL_API -DOSTYPE=\"Linux2.6\" -DOSARCH=\"Linux\" -DBUILD_ID=2006020611 -D_IMPL_NS_COM -I../../dist/include/string -I../../dist/include/xpcom -I../../dist/include -I/usr/include/nspr -I/usr/X11R6/include -fPIC -DGENTOO_NSPLUGINS_DIR=\"/usr/lib/nsplugins\" -DGENTOO_NSBROWSER_PLUGINS_DIR=\"/usr/lib/nsbrowser/plugins\" -I/usr/X11R6/include -fno-rtti -fno-handle-exceptions -Wconversion -Wpointer-arith -Wcast-align -Woverloaded-virtual -Wsynth -Wno-ctor-dtor-privacy -Wno-non-virtual-dtor -Wno-long-long -march=pentium4 -pipe -Wno-return-type -w -freorder-blocks -fno-reorder-functions -fshort-wchar -pthread -pipe -DNDEBUG -DTRIMMED -ffunction-sections -O2 -DGENTOO_NSPLUGINS_DIR=\"/usr/lib/nsplugins\" -DGENTOO_NSBROWSER_PLUGINS_DIR=\"/usr/lib/nsbrowser/plugins\" -I/usr/X11R6/include -DMOZILLA_CLIENT -include ../../mozilla-config.h -Wp,-MD,.deps/nsStackFrameUnix.pp nsStackFrameUnix.cpp 
nsIConsoleListener.idl 
../../dist/bin/xpidl -m typelib -w -I ../../dist/idl -I. -o _xpidlgen/nsIConsoleListener nsIConsoleListener.idl 
nsIConsoleMessage.idl 
../../dist/bin/xpidl -m typelib -w -I ../../dist/idl -I. -o _xpidlgen/nsIConsoleMessage nsIConsoleMessage.idl 
nsIConsoleService.idl 
../../dist/bin/xpidl -m typelib -w -I ../../dist/idl -I. -o _xpidlgen/nsIConsoleService nsIConsoleService.idl 
nsIErrorService.idl 
../../dist/bin/xpidl -m typelib -w -I ../../dist/idl -I. -o _xpidlgen/nsIErrorService nsIErrorService.idl 
nsIException.idl 
../../dist/bin/xpidl -m typelib -w -I ../../dist/idl -I. -o _xpidlgen/nsIException nsIException.idl 
nsIExceptionService.idl 
../../dist/bin/xpidl -m typelib -w -I ../../dist/idl -I. -o _xpidlgen/nsIExceptionService nsIExceptionService.idl 
nsIVersionComparator.idl 
../../dist/bin/xpidl -m typelib -w -I ../../dist/idl -I. -o _xpidlgen/nsIVersionComparator nsIVersionComparator.idl 
nsIDebug.idl 
../../dist/bin/xpidl -m typelib -w -I ../../dist/idl -I. -o _xpidlgen/nsIDebug nsIDebug.idl 
nsIInterfaceRequestor.idl 
../../dist/bin/xpidl -m typelib -w -I ../../dist/idl -I. -o _xpidlgen/nsIInterfaceRequestor nsIInterfaceRequestor.idl 
nsIMemory.idl 
../../dist/bin/xpidl -m typelib -w -I ../../dist/idl -I. -o _xpidlgen/nsIMemory nsIMemory.idl 
nsIProgrammingLanguage.idl 
../../dist/bin/xpidl -m typelib -w -I ../../dist/idl -I. -o _xpidlgen/nsIProgrammingLanguage nsIProgrammingLanguage.idl 
nsISupports.idl 
../../dist/bin/xpidl -m typelib -w -I ../../dist/idl -I. -o _xpidlgen/nsISupports nsISupports.idl 
nsITraceRefcnt.idl 
../../dist/bin/xpidl -m typelib -w -I ../../dist/idl -I. -o _xpidlgen/nsITraceRefcnt nsITraceRefcnt.idl 
nsIWeakReference.idl 
../../dist/bin/xpidl -m typelib -w -I ../../dist/idl -I. -o _xpidlgen/nsIWeakReference nsIWeakReference.idl 
nsrootidl.idl 
../../dist/bin/xpidl -m typelib -w -I ../../dist/idl -I. -o _xpidlgen/nsrootidl nsrootidl.idl 
../../dist/bin/xpt_link _xpidlgen/xpcom_base.xpt _xpidlgen/nsIConsoleListener.xpt _xpidlgen/nsIConsoleMessage.xpt _xpidlgen/nsIConsoleService.xpt _xpidlgen/nsIErrorService.xpt _xpidlgen/nsIException.xpt _xpidlgen/nsIExceptionService.xpt _xpidlgen/nsIVersionComparator.xpt _xpidlgen/nsIDebug.xpt _xpidlgen/nsIInterfaceRequestor.xpt _xpidlgen/nsIMemory.xpt _xpidlgen/nsIProgrammingLanguage.xpt _xpidlgen/nsISupports.xpt _xpidlgen/nsITraceRefcnt.xpt _xpidlgen/nsIWeakReference.xpt _xpidlgen/nsrootidl.xpt 
nsStackFrameUnix.cpp: In function 'void DumpStackToFile(FILE*)': 
nsStackFrameUnix.cpp:101: error: 'JB_BP' was not declared in this scope 
gmake[3]: *** [nsStackFrameUnix.o] Error 1 
gmake[3]: Leaving directory `/var/tmp/portage/mozilla-firefox-1.5-r11/work/mozilla/xpcom/base' 
gmake[2]: *** [libs] Error 2 
gmake[2]: Leaving directory `/var/tmp/portage/mozilla-firefox-1.5-r11/work/mozilla/xpcom' 
gmake[1]: *** [tier_2] Error 2 
gmake[1]: Leaving directory `/var/tmp/portage/mozilla-firefox-1.5-r11/work/mozilla' 
make: *** [default] Error 2 

!!! ERROR: www-client/mozilla-firefox-1.5-r11 failed. 
Call stack: 
 ebuild.sh, line 1894: Called dyn_compile 
 ebuild.sh, line 941: Called src_compile 

!!! (no error message) 
!!! If you need support, post the topmost build error, and the call stack if relevant.
试试这个:
上传的附件
mozilla-firefox-1.5.0.1-overlay.tar.bz2 (19.6 KB, 20 次查看)

作者: ifree   发布时间: 2006-03-14

整了半天,mozilla的两个类似补丁打不上。有没有人可以写个overlay出来呢?
下面附上补丁:

代码:
--- xpcom/base/nsTraceRefcntImpl.cpp 2004-02-11 07:16:10.000000000 +0000 
+++ xpcom/base/nsTraceRefcntImpl.cpp 2006-03-13 05:56:48.810241000 +0000 
@@ -50,19 +50,6 @@ 
 
 #if defined(_WIN32) 
 #include <windows.h> 
-#elif defined(linux) && defined(__GLIBC__) && (defined(__i386) || defined(PPC)) 
-#include <setjmp.h> 
- 
-// 
-// On glibc 2.1, the Dl_info api defined in <dlfcn.h> is only exposed 
-// if __USE_GNU is defined. I suppose its some kind of standards 
-// adherence thing. 
-// 
-#if (__GLIBC_MINOR__ >= 1) && !defined(__USE_GNU) 
-#define __USE_GNU 
-#endif 
- 
-#include <dlfcn.h> 
 #endif 
 
 #ifdef HAVE_LIBDL 
@@ -484,7 +471,7 @@ 
 
 #endif /* NS_BUILD_REFCNT_LOGGING */ 
 
-nsresult 
+NS_COM nsresult 
 nsTraceRefcntImpl::DumpStatistics(StatisticsType type, FILE* out) 
 { 
 nsresult rv = NS_OK; 
@@ -561,7 +548,7 @@ 
 return rv; 
 } 
 
-void 
+NS_COM void 
 nsTraceRefcntImpl::ResetStatistics() 
 { 
 #ifdef NS_BUILD_REFCNT_LOGGING 
@@ -850,7 +837,7 @@ 
 
 #if defined(_WIN32) && defined(_M_IX86) // WIN32 x86 stack walking code 
 #include "nsStackFrameWin.h" 
-void 
+NS_COM void 
 nsTraceRefcntImpl::WalkTheStack(FILE* aStream) 
 { 
 DumpStackToFile(aStream); 
@@ -858,9 +845,9 @@ 
 
 // WIN32 x86 stack walking code 
 // i386 or PPC Linux stackwalking code or Solaris 
-#elif (defined(linux) && defined(__GLIBC__) && (defined(__i386) || defined(PPC))) || (defined(__sun) && (defined(__sparc) || defined(sparc) || defined(__i386) || defined(i386))) 
+#elif (defined(linux) && defined(__GNUC__) && (defined(__i386) || defined(PPC))) || (defined(__sun) && (defined(__sparc) || defined(sparc) || defined(__i386) || defined(i386))) 
 #include "nsStackFrameUnix.h" 
-void 
+NS_COM void 
 nsTraceRefcntImpl::WalkTheStack(FILE* aStream) 
 { 
 DumpStackToFile(aStream); 
@@ -960,7 +947,7 @@ 
 
 #else // unsupported platform. 
 
-void 
+NS_COM void 
 nsTraceRefcntImpl::WalkTheStack(FILE* aStream) 
 { 
 fprintf(aStream, "write me, dammit!\n");
代码:
---xpcom/base/nsStackFrameUnix.cpp 2004-03-08 07:47:44.000000000 +0000 
+++ xpcom/base/nsStackFrameUnix.cpp 2006-03-13 05:56:48.866244500 +0000 
@@ -78,25 +78,15 @@ 
 } 
 
 
-#if defined(linux) && defined(__GLIBC__) && (defined(__i386) || defined(PPC)) // i386 or PPC Linux stackwalking code 
+#if defined(linux) && defined(__GNUC__) && (defined(__i386) || defined(PPC)) // i386 or PPC Linux stackwalking code 
 
-#include <setjmp.h> 
-// 
 
 void DumpStackToFile(FILE* aStream) 
 { 
- jmp_buf jb; 
- setjmp(jb); 
- 
 // Stack walking code courtesy Kipp's "leaky". 
 
- // Get the frame pointer out of the jmp_buf 
- void **bp = (void**) 
-#if defined(__i386) 
- (jb[0].__jmpbuf[JB_BP]); 
-#elif defined(PPC) 
- (jb[0].__jmpbuf[JB_GPR1]); 
-#endif 
+ // Get the frame pointer 
+ void **bp = (void**) __builtin_frame_address(0); 
 
 int skip = 2; 
 for ( ; (void**)*bp > bp; bp = (void**)*bp) {

作者: ifree   发布时间: 2006-03-14

正在用gcc4.1.0 emerge -e world
glibc2.4 已经成功编译过去了 希望firefox不要出问题

作者: fakeid   发布时间: 2006-03-14

按我上面给的连接所说,你用glibc2.4后编译firefox不用那个补丁会出问题的。mozilla也会遇到同样的问题。
因为mozilla出问题,所以gnome中一些依赖于mozilla的也编译不过。

作者: ifree   发布时间: 2006-03-14

已经成功 emerge -e world 成功 没有所说的问题
gentoo 2006.0 amd64 gcc4.1.0 glibc2.4 firefox1.5.0.1 成功编译 中间没有问题

作者: fakeid   发布时间: 2006-03-16

是吗?我是编译的32位系统;难道32位的和64位的不同?

作者: ifree   发布时间: 2006-03-16