This is the mail archive of the java-patches@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH, take 2] Build java as two separate DLLs on windows.


Andrew Haley wrote:

> I had a look, and while it looks OK it seems to be written only for
> Windows. That's a shame.  Will it work on GNU/Linux?  Can it be made to?
> That would help to keep the facility from bitrotting.

  It doesn't quite work on linux.  Builds both the libraries, but then there's
some kind of problem caused by the use of ELF visibility when it starts trying
to link the tools against them:

------------------------------------------------------------------
/bin/sh ./libtool --tag=GCJ  --mode=link /gnu/gcc/obj/./gcc/gcj
-B/gnu/gcc/obj/i686-pc-linux-gnu/libjava/ -B/gnu/gcc/obj/./gcc/
-B/opt/gcc-tools/i686-pc-linux-gnu/bin/
-B/opt/gcc-tools/i686-pc-linux-gnu/lib/ -isystem
/opt/gcc-tools/i686-pc-linux-gnu/include -isystem
/opt/gcc-tools/i686-pc-linux-gnu/sys-include
-L/gnu/gcc/obj/i686-pc-linux-gnu/libjava -ffloat-store -fomit-frame-pointer
-Usun -g -O2  -o jv-convert --main=gnu.gcj.convert.Convert -rpath
/opt/gcc-tools/lib/gcc/i686-pc-linux-gnu/4.5.0 -shared-libgcc
-L/gnu/gcc/obj/i686-pc-linux-gnu/libjava/.libs libgcj.la
libtool: link: /gnu/gcc/obj/./gcc/gcj
-B/gnu/gcc/obj/i686-pc-linux-gnu/libjava/ -B/gnu/gcc/obj/./gcc/
-B/opt/gcc-tools/i686-pc-linux-gnu/bin/
-B/opt/gcc-tools/i686-pc-linux-gnu/lib/ -isystem
/opt/gcc-tools/i686-pc-linux-gnu/include -isystem
/opt/gcc-tools/i686-pc-linux-gnu/sys-include -ffloat-store
-fomit-frame-pointer -Usun -g -O2 -o .libs/jv-convert
--main=gnu.gcj.convert.Convert -shared-libgcc
-L/gnu/gcc/obj/i686-pc-linux-gnu/libjava/.libs
-L/gnu/gcc/obj/i686-pc-linux-gnu/libjava ./.libs/libgcj.so -lpthread -lrt -ldl
-Wl,-rpath -Wl,/opt/gcc-tools/lib/gcc/i686-pc-linux-gnu/4.5.0
/gnu/gcc/obj/i686-pc-linux-gnu/libjava/.libs/libgcj-noncore.so: undefined
reference to `hidden alias for long long
gnu::java::lang::management::VMMemoryPoolMXBeanImpl::getUsageThresholdCount(java::lang::String*)'
/gnu/gcc/obj/i686-pc-linux-gnu/libjava/.libs/libgcj-noncore.so: undefined
reference to `hidden alias for JArray<java::lang::String*>*
gnu::java::lang::management::VMMemoryPoolMXBeanImpl::getMemoryManagerNames(java::lang::String*)'
/gnu/gcc/obj/i686-pc-linux-gnu/libjava/.libs/libgcj-noncore.so: undefined
reference to `hidden alias for bool
gnu::java::lang::management::VMMemoryMXBeanImpl::isVerbose()'
/gnu/gcc/obj/i686-pc-linux-gnu/libjava/.libs/libgcj-noncore.so: undefined
reference to `hidden alias for JArray<long long>*
gnu::java::lang::management::VMThreadMXBeanImpl::findDeadlockedThreads()'
/gnu/gcc/obj/i686-pc-linux-gnu/libjava/.libs/libgcj-noncore.so: undefined
reference to `hidden alias for long long
gnu::java::lang::management::VMRuntimeMXBeanImpl::getStartTime()'
/gnu/gcc/obj/i686-pc-linux-gnu/libjava/.libs/libgcj-noncore.so: undefined
reference to `hidden alias for bool
gnu::java::lang::management::VMMemoryPoolMXBeanImpl::isValid(java::lang::String*)'
/gnu/gcc/obj/i686-pc-linux-gnu/libjava/.libs/libgcj-noncore.so: undefined
reference to `hidden alias for java::lang::management::ThreadInfo*
gnu::java::lang::management::VMThreadMXBeanImpl::getThreadInfoForId(long long,
int)'
/gnu/gcc/obj/i686-pc-linux-gnu/libjava/.libs/libgcj-noncore.so: undefined
reference to `hidden alias for bool
gnu::java::lang::management::VMClassLoadingMXBeanImpl::isVerbose()'
/gnu/gcc/obj/i686-pc-linux-gnu/libjava/.libs/libgcj-noncore.so: undefined
reference to `hidden alias for JArray<char>*
gnu::gcj::io::SimpleSHSStream::shsFinal(JArray<char>*)'
/gnu/gcc/obj/i686-pc-linux-gnu/libjava/.libs/libgcj-noncore.so: undefined
reference to `hidden alias for java::lang::management::MemoryUsage*
gnu::java::lang::management::VMMemoryPoolMXBeanImpl::getCollectionUsage(java::lang::String*)'
/gnu/gcc/obj/i686-pc-linux-gnu/libjava/.libs/libgcj-noncore.so: undefined
reference to `hidden alias for void
gnu::java::lang::management::VMMemoryPoolMXBeanImpl::setUsageThreshold(java::lang::String*,
long long)'
/gnu/gcc/obj/i686-pc-linux-gnu/libjava/.libs/libgcj-noncore.so: undefined
reference to `hidden alias for void
gnu::java::lang::management::VMThreadMXBeanImpl::getLockInfo(java::lang::management::ThreadInfo*)'
/gnu/gcc/obj/i686-pc-linux-gnu/libjava/.libs/libgcj-noncore.so: undefined
reference to `hidden alias for JArray<char>*
gnu::gcj::io::SimpleSHSStream::shsInit()'
/gnu/gcc/obj/i686-pc-linux-gnu/libjava/.libs/libgcj-noncore.so: undefined
reference to `hidden alias for long long
gnu::java::lang::management::VMThreadMXBeanImpl::getCurrentThreadUserTime()'
/gnu/gcc/obj/i686-pc-linux-gnu/libjava/.libs/libgcj-noncore.so: undefined
reference to `hidden alias for int
gnu::java::lang::management::VMMemoryMXBeanImpl::getObjectPendingFinalizationCount()'
/gnu/gcc/obj/i686-pc-linux-gnu/libjava/.libs/libgcj-noncore.so: undefined
reference to `hidden alias for java::lang::management::MemoryUsage*
gnu::java::lang::management::VMMemoryPoolMXBeanImpl::getUsage(java::lang::String*)'
/gnu/gcc/obj/i686-pc-linux-gnu/libjava/.libs/libgcj-noncore.so: undefined
reference to `hidden alias for JArray<java::lang::String*>*
gnu::java::lang::management::VMRuntimeMXBeanImpl::getInputArguments()'
/gnu/gcc/obj/i686-pc-linux-gnu/libjava/.libs/libgcj-noncore.so: undefined
reference to `hidden alias for long long
gnu::java::lang::management::VMGarbageCollectorMXBeanImpl::getCollectionCount(java::lang::String*)'
/gnu/gcc/obj/i686-pc-linux-gnu/libjava/.libs/libgcj-noncore.so: undefined
reference to `hidden alias for long long
gnu::java::lang::management::VMMemoryPoolMXBeanImpl::getUsageThreshold(java::lang::String*)'
/gnu/gcc/obj/i686-pc-linux-gnu/libjava/.libs/libgcj-noncore.so: undefined
reference to `hidden alias for long long
gnu::java::lang::management::VMCompilationMXBeanImpl::getTotalCompilationTime()'
/gnu/gcc/obj/i686-pc-linux-gnu/libjava/.libs/libgcj-noncore.so: undefined
reference to `hidden alias for JArray<long long>*
gnu::java::lang::management::VMThreadMXBeanImpl::findMonitorDeadlockedThreads()'
/gnu/gcc/obj/i686-pc-linux-gnu/libjava/.libs/libgcj-noncore.so: undefined
reference to `hidden alias for void
gnu::java::lang::management::VMMemoryMXBeanImpl::setVerbose(bool)'
/gnu/gcc/obj/i686-pc-linux-gnu/libjava/.libs/libgcj-noncore.so: undefined
reference to `hidden alias for void
gnu::java::lang::management::VMThreadMXBeanImpl::getMonitorInfo(java::lang::management::ThreadInfo*)'
/gnu/gcc/obj/i686-pc-linux-gnu/libjava/.libs/libgcj-noncore.so: undefined
reference to `hidden alias for long long
gnu::java::lang::management::VMClassLoadingMXBeanImpl::getUnloadedClassCount()'
/gnu/gcc/obj/i686-pc-linux-gnu/libjava/.libs/libgcj-noncore.so: undefined
reference to `hidden alias for int
gnu::java::lang::management::VMThreadMXBeanImpl::getPeakThreadCount()'
/gnu/gcc/obj/i686-pc-linux-gnu/libjava/.libs/libgcj-noncore.so: undefined
reference to `hidden alias for int
gnu::java::lang::management::VMClassLoadingMXBeanImpl::getLoadedClassCount()'
/gnu/gcc/obj/i686-pc-linux-gnu/libjava/.libs/libgcj-noncore.so: undefined
reference to `hidden alias for long long
gnu::java::lang::management::VMGarbageCollectorMXBeanImpl::getCollectionTime(java::lang::String*)'
/gnu/gcc/obj/i686-pc-linux-gnu/libjava/.libs/libgcj-noncore.so: undefined
reference to `hidden alias for java::lang::String*
gnu::java::lang::management::VMMemoryPoolMXBeanImpl::getType(java::lang::String*)'
/gnu/gcc/obj/i686-pc-linux-gnu/libjava/.libs/libgcj-noncore.so: undefined
reference to `hidden alias for java::lang::management::MemoryUsage*
gnu::java::lang::management::VMMemoryMXBeanImpl::getNonHeapMemoryUsage()'
/gnu/gcc/obj/i686-pc-linux-gnu/libjava/.libs/libgcj-noncore.so: undefined
reference to `hidden alias for void
gnu::java::lang::management::VMMemoryPoolMXBeanImpl::setCollectionUsageThreshold(java::lang::String*,
long long)'
/gnu/gcc/obj/i686-pc-linux-gnu/libjava/.libs/libgcj-noncore.so: undefined
reference to `hidden alias for void
gnu::java::lang::management::VMClassLoadingMXBeanImpl::setVerbose(bool)'
/gnu/gcc/obj/i686-pc-linux-gnu/libjava/.libs/libgcj-noncore.so: undefined
reference to `hidden alias for java::lang::management::MemoryUsage*
gnu::java::lang::management::VMMemoryPoolMXBeanImpl::getPeakUsage(java::lang::String*)'
/gnu/gcc/obj/i686-pc-linux-gnu/libjava/.libs/libgcj-noncore.so: undefined
reference to `hidden alias for long long
gnu::java::lang::management::VMThreadMXBeanImpl::getThreadUserTime(long long)'
/gnu/gcc/obj/i686-pc-linux-gnu/libjava/.libs/libgcj-noncore.so: undefined
reference to `hidden alias for void
gnu::java::lang::management::VMThreadMXBeanImpl::resetPeakThreadCount()'
/gnu/gcc/obj/i686-pc-linux-gnu/libjava/.libs/libgcj-noncore.so: undefined
reference to `hidden alias for long long
gnu::java::lang::management::VMMemoryPoolMXBeanImpl::getCollectionUsageThreshold(java::lang::String*)'
/gnu/gcc/obj/i686-pc-linux-gnu/libjava/.libs/libgcj-noncore.so: undefined
reference to `hidden alias for void
gnu::gcj::io::SimpleSHSStream::shsUpdate(JArray<char>*, JArray<char>*, int)'
/gnu/gcc/obj/i686-pc-linux-gnu/libjava/.libs/libgcj-noncore.so: undefined
reference to `hidden alias for long long
gnu::java::lang::management::VMThreadMXBeanImpl::getThreadCpuTime(long long)'
/gnu/gcc/obj/i686-pc-linux-gnu/libjava/.libs/libgcj-noncore.so: undefined
reference to `hidden alias for double
gnu::java::lang::management::VMOperatingSystemMXBeanImpl::getSystemLoadAverage()'
/gnu/gcc/obj/i686-pc-linux-gnu/libjava/.libs/libgcj-noncore.so: undefined
reference to `hidden alias for void
gnu::java::lang::management::VMMemoryPoolMXBeanImpl::resetPeakUsage(java::lang::String*)'
/gnu/gcc/obj/i686-pc-linux-gnu/libjava/.libs/libgcj-noncore.so: undefined
reference to `hidden alias for long long
gnu::java::lang::management::VMMemoryPoolMXBeanImpl::getCollectionUsageThresholdCount(java::lang::String*)'
/gnu/gcc/obj/i686-pc-linux-gnu/libjava/.libs/libgcj-noncore.so: undefined
reference to `hidden alias for bool
gnu::java::lang::management::VMMemoryManagerMXBeanImpl::isValid(java::lang::String*)'
/gnu/gcc/obj/i686-pc-linux-gnu/libjava/.libs/libgcj-noncore.so: undefined
reference to `hidden alias for long long
gnu::java::lang::management::VMThreadMXBeanImpl::getTotalStartedThreadCount()'
/gnu/gcc/obj/i686-pc-linux-gnu/libjava/.libs/libgcj-noncore.so: undefined
reference to `hidden alias for long long
gnu::java::lang::management::VMRuntimeMXBeanImpl::getPID()'
/gnu/gcc/obj/i686-pc-linux-gnu/libjava/.libs/libgcj-noncore.so: undefined
reference to `hidden alias for long long
gnu::java::lang::management::VMThreadMXBeanImpl::getCurrentThreadCpuTime()'
collect2: ld returned 1 exit status
make[3]: *** [jv-convert] Error 1
------------------------------------------------------------------

  I would guess that when the functions were all in one library together they
could see each other even if not externally visible, and now they're in
separate libraries they can't.  PE targets don't support visibility so it
doesn't prevent the functions being imported by libgcj-noncore from libgcj.

  Not being a major ELF-head, I don't know what would be the right thing to do
about this.  Make them visible?  Is there any way of declaring a "friend library"?

    cheers,
      DaveK


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]