To All,
This seems like a good suggestion by Tim on having the compilier/linker 
ignore errors with Weak (or as in my case doesn't exist symbols.  It is 
undefined).
Anyone know how to make gcc and/or perl do this???   I've been working on 
this for 3 days and can't seem to find the answer. 

It's a shame, everything is clean and the "make test" still hangs on these 
few lines of code.  I've even done a 
export 
LD_PRELOAD=/ora01/app/oracle/product/10.2/jre/1.4.2/lib/PA_RISC/libjava.sl

Nothing.. Same error

Thank You
Rich


• '•..• '•. ><((((º> .• '•. .• '•. •. .• '•. ><((((º>
“Anything that doesn’t eat you today is saving you for tomorrow.”



Computer Sciences Corporation 
Registered Office: 2100 East Grand Avenue, El Segundo California 90245, 
USA
Registered in USA No: C-489-59

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
This is a PRIVATE message. If you are not the intended recipient, please 
delete without copying and kindly advise us by e-mail of the mistake in 
delivery. 
NOTE: Regardless of content, this e-mail shall not operate to bind CSC to 
any order or other contract unless pursuant to explicit written agreement 
or government initiative expressly permitting the use of e-mail for such 
purpose.
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------




Tim Bunce <[EMAIL PROTECTED]> 
12/13/2007 04:22 PM

To
Richard T Malafa/DEF/[EMAIL PROTECTED]
cc
Alexander V Alekseev <[EMAIL PROTECTED]>, dbi-dev@perl.org, 
[EMAIL PROTECTED], Joseph E Schmalhofer/DEF/[EMAIL PROTECTED]
Subject
Re: ANNOUNCE: DBD::Oracle 1.20 Release Candidate







Google suggests that Jv_registersClasses is a 'weak symbol' so
shouldn't cause errors if undefined. That suggests there's a problem
with your compiler/linker configuration.

Tim.

On Thu, Dec 13, 2007 at 03:18:16PM -0500, Richard T Malafa wrote:
> Alex,
> I went over the information again.   Jv_registersClasses is undefined in 

> everywhere on the HP UX machines.   I can hardly believe that no one has 

> solved this problem since I see things like below for HP machines.  I've 

> even tried doing DBI from source and I get the Jv_registersClasses 
error. 
> I got an C++ error example but this is not C++.    It can't be the Java 
> Libraries since there are no "sl" or "so" files in those anymore.  And 
> what the heck is the Java Jv_registers error doing in c or c++ 
anymore??? 
> 
> I checked every perl binary I could find for HP UX and in every case 
it's 
> not defined.   I wouldn't know what a definition of Jv_registersClasses 
> looks like if it bit me.
> 
> I do have
> [EMAIL PROTECTED]> find / -name "libstdc*"
> /opt/hp-gcc64-4.2.0/lib/libstdc++.a
> /opt/hp-gcc64-4.2.0/lib/libstdc++.la
> /opt/hp-gcc64-4.2.0/lib/libstdc++.sl.6.9
> /opt/hp-gcc64-4.2.0/lib/libstdc++.sl
> /opt/hp-gcc64-4.2.0/lib/libstdc++.sl.6
> [EMAIL PROTECTED]
> 
> I don't think any of these are being called by 'make test', but I can't 
> prove that.. 
> 
> pm> des 77 
> ====================
> Package 77:
>     Name: DBI
>  Version: 1.53
>   Author: Tim Bunce ([EMAIL PROTECTED])
>    Title: DBI
> Abstract: Database independent interface for Perl
> Location: ActiveState
> Available Platforms:
>        1. PA-RISC2.0-thread-multi-LP64-5.8
> ====================
> ppm>
> 
> Package 82:
>     Name: DBI-Shell
>  Version: 11.94
>   Author: Thomas A. Lowery ([EMAIL PROTECTED])
>    Title: DBI-Shell
> Abstract: Interactive command shell for the DBI
> Location: ActiveState
> Prerequisites:
>        1. IO-Tee 0.0
>        2. Text-Reform 0.0
> Available Platforms:
>        1. PA-RISC2.0-thread-multi-LP64-5.8
> ====================
> 
> Other information on using the new 1.20 RC4 version of DBD.  It's much 
> cleaner.  Lot of minor errors are now gone.  I also put in the export 
> LDOPTS="+s -L/usr/local/lib -L/usr/lib" for the environment which 
> certainly helps.. 
> I'm going to reload the newer version of gcc 4.2.2 with the newer binary 

> utils in a bit.  But somehow someone has the knowledge of how to fix my 
> problem.  I'm thinking it's a simple solution along the lines of fixing 
> that +b $ error in the original perl Makefile.PL   No one has updated 
the 
> doc on this yet.
> 
> This is all the errors that are left and repeating all through "make 
> test".  Everything else is cleaned up..
> 
> PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" 
> "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
> /usr/lib/pa20_64/dld.sl: Unsatisfied code symbol '_Jv_RegisterClasses' 
in 
> load module '/opt/perl_64/lib/5.8.8/PA-RISC2.0-th
> read-multi-LP64/auto/Cwd/Cwd.sl'.
> t/01base................/usr/lib/pa20_64/dld.sl: Unsatisfied code symbol 

> '_Jv_RegisterClasses' in load module '/opt/perl_64
> /lib/5.8.8/PA-RISC2.0-thread-multi-LP64/auto/Cwd/Cwd.sl'.
> /usr/lib/pa20_64/dld.sl: Unsatisfied code symbol '_Jv_RegisterClasses' 
in 
> load module '/opt/perl_64/lib/5.8.8/PA-RISC2.0-th
> read-multi-LP64/auto/List/Util/Util.sl'.
> /usr/lib/pa20_64/dld.sl: Unsatisfied code symbol '_Jv_RegisterClasses' 
in 
> load module '/opt/perl_64/lib/5.8.8/PA-RISC2.0-th
> read-multi-LP64/auto/List/Util/Util.sl'.
> /usr/lib/pa20_64/dld.sl: Unsatisfied code symbol '_Jv_RegisterClasses' 
in 
> load module '/Xtra/pwork/DBD-Oracle-1.20-RC4/blib
> /arch/auto/DBD/Oracle/Oracle.sl'.
> Failed to load Oracle extension and/or shared libraries:
> install_driver(Oracle) failed: Can't load 
> '/Xtra/pwork/DBD-Oracle-1.20-RC4/blib/arch/auto/DBD/Oracle/Oracle.sl' 
for 
> module
> DBD::Oracle: Unresolved external at 
> /opt/perl_64/lib/5.8.8/PA-RISC2.0-thread-multi-LP64/DynaLoader.pm line 
> 230.
>  at (eval 7) line 3
> Compilation failed in require at (eval 7) line 3
> 
> Thank You for your Help.
> Rich 
> 
> ??? '???..??? '???. ><((((º> .??? '???. .??? '???. ???. .??? '???. 
><((((º>
> ???Anything that doesn???t eat you today is saving you for tomorrow.???
> 
> 
> 
> Computer Sciences Corporation 
> Registered Office: 2100 East Grand Avenue, El Segundo California 90245, 
> USA
> Registered in USA No: C-489-59
> 
> 
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> This is a PRIVATE message. If you are not the intended recipient, please 

> delete without copying and kindly advise us by e-mail of the mistake in 
> delivery. 
> NOTE: Regardless of content, this e-mail shall not operate to bind CSC 
to 
> any order or other contract unless pursuant to explicit written 
agreement 
> or government initiative expressly permitting the use of e-mail for such 

> purpose.
> 
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> 
> 
> 
> 
> Alexander V Alekseev <[EMAIL PROTECTED]> 
> 12/04/2007 04:59 PM
> 
> To
> Richard T Malafa/DEF/[EMAIL PROTECTED]
> cc
> dbi-dev@perl.org, [EMAIL PROTECTED]
> Subject
> Re: ANNOUNCE: DBD::Oracle 1.20 Release Candidate
> 
> 
> 
> 
> 
> 
>                                  Hello!
> 
> 
> 
> On Tue, 4 Dec 2007, Richard T Malafa wrote:
> 
> > Hi Alex,
> > Yes, I remember that...
> > 
> > >         It's rather bad, that you get this error. I suppose, that 
the
> > > someone needs to fix DynaLoader perl object port to HPUX. You should 

> > > probably
> > > submit this bug (with Cwd for simplicity) to official Perl5 bug 
list.
> > > See http://rt.perl.org/perlbug/ .
> > 
> > I should have added more to my statement.
> > 
> > There is  more than just perl.
> > 
> > I've looked at a lot of 64 bit modules and none of them seem to define 

> the 
> > _Jv_RegisterClasses problem.    I don't know why it is that way.
> > 
> > Here's the other problem:
> > 
> > I have to use the HP binary since it is already one with a gcc 
compiler 
> 
> > and other features that we use here.   In addition it does contain 
> working 
> > dbi 1.5 and all the corrections everyone wanted in the past is done. 
(as 
> 
> > far as I know.  I haven't found one not corrected).
> > 
> > Even though the make perl works just fine after that code correction. 
> I'm 
> > going to try to combine the 64 bit and 32 bit libraries (even though 
we 
> > don't use them anymore) and see what happens.
> > 
> > It's just so heartbreaking when the make test fails so bad right off 
the 
> 
> > bat.
> > 
> > Last but not Least important.   We have to use standard binaries as 
much 
> 
> > as possible since most compiling (if not all) is forbidden at the 
remote 
> 
> > site due to security reasons.
> 
>                  I've done some research on the problem. As we noticed, 
> this
> symbol is marked "WEAK UNDEF" in symbol list. If you google for "weak
> symbol", you'll find two definitions of the term. For example:
> 
> ------------ From wikipedia: -------------
> weak symbol is a symbol definition in an object file or dynamic library
> that may be overridden by other symbol definitions.
> ------------------------------------------
> 
> But Linux "man 1 nm" says:
> ---------- man 1 nm  ----------
> 
>   "V" The symbol is a weak object.  When a weak defined symbol is linked
>       with  a normal  defined  symbol,  the normal defined symbol is
>       used with no error.  When a weak undefined symbol is linked and
>       the symbol is not defined,  the value of the weak symbol becomes
>       zero with no error.
> -------------------------------
> 
> And here
> http://docs.sun.com/app/docs/doc/817-1984/6mhm7pl17?a=view 
> we find long and detailed explanation of weak symbols.
> 
> Please notice, that meaning of "WEAK" is different depending
> on whether the symbol is defined:
> 
> ---- Solaris 10 Linker and Libraries Guide ----
> ...
> Symbol Resolution
> ...
> Symbols that undergo resolution can have either a global or weak
> binding. Within relocatable objects, weak bindings have lower precedence
> than global binding. Relocatable object symbols with different bindings
> are resolved according to a slight alteration of the basic rules.
> ...
> In symbol resolution, weak defined symbols are silently overridden by
> any global definition of the same name.
> ...
> Undefined Symbols
> ...
> Weak Symbols
> 
> Weak symbol references that remain unresolved, do not result in a fatal
> error condition, no matter what output file type is being generated.
> 
> If a static executable is being generated, the symbol is converted to an
> absolute symbol with an assigned value of zero.
> 
> If a dynamic executable or shared object is being produced, the symbol
> is left as an undefined weak reference with an assigned value of zero.
> During process execution, the runtime linker searches for this symbol.
> If the runtime linker does not find a match, the reference is bound to
> an address of zero instead of generating a fatal relocation error.
> 
> Historically, these undefined weak referenced symbols have been employed
> as a mechanism to test for the existence of functionality. For example,
> the following C code fragment might have been used in the shared object
> libfoo.so.1:
> 
> #pragma weak    foo
> 
> extern  void    foo(char *);
> 
> void bar(char * path)
> {
>         void (* fptr)(char *);
> 
>         if ((fptr = foo) != 0)
>                 (* fptr)(path);
> }
> 
> When building an application that references libfoo.so.1, the link-edit
> completes successfully regardless of whether a definition for the symbol
> foo is found. If during execution of the application the function
> address tests nonzero, the function is called. However, if the symbol
> definition is not found, the function address tests zero and therefore
> is not called.
> 
> ---------------------------------------------
> 
>       As you see, compiler has put weak undefined reference to
> _Jv_RegisterClasses for some reason. This should guarantee that
> program would run even with undefined symbol _Jv_RegisterClasses.
>                  And it seems to work even at your HPUX!
> 
>                  But, if you try to load some dynamic library 
explicitely 
> (via dlopen() call), you have a choice whether to specify
> RTLD_LAZY or RTLD_NOW mode. The first is the default mode in perl
> binary. But if you choose to use the second flag,
> all undefined symbols in the  library  are  resolved before
> dlopen() returns.
> 
>                  For Linux & Solaris symbols this requirement doesn't
> include WEAK symbols. But for HPUX does, as I see in your case.
> 
>                  In perlrun manual PERL_DL_NONLAZY environment variable 
is
> described like this:
> 
> ------------------------------------------
> PERL_DL_NONLAZY
>   Set to one to have perl resolve all undefined symbols when it loads a
>   dynamic library.  The default behaviour is to resolve symbols when
>   they are used.  Setting this variable is useful during testing of
>   extensions as it ensures that you get an error on misspelled function
>   names even if the test suite doesn't call it.
> ------------------------------------------
> 
>                  It is implemented as specifying RTLD_NOW mode for all
> dlopen() calls.
> 
>                  For Linux & Solaris it works even for libraries with
> WEAK UNDEF symbols. But HPUX fails.
> 
>                  I pointed you to Cwd.so module which is supplied with 
OS 
> perl
> binary to show you that the problem is not in DBD::Oracle module.
> 
>                  This is the problem in compiler or perl port to HPUX. 
Or 
> even
> both. I don't think that the problem may be solved locally in
> DBD::Oracle module.
> 
>                  You have workaroud (as described in
> README-files/hpux/libjava.eml document).
> 
> 
>                  You mentioned, that 64-bit moduled do not have such 
> trouble.
> But 32-bit & 64-bit environments are completely different. It's not
> a surprize to me that 64-bit subsystem does not have a reference
> to _Jv_RegisterClasses.
>                  You cannot use 64-bit and 32-bit libraries in the same
> process. It's impossible.
> 
>                  Finally, you have 4 choises:
> 1) Fix
> 
> PERL_DL_NONLAZY=1 perl -e 'require Cwd; import Cwd; print cwd(),"\n"'
> 
> by using different perl binary.
> 
> 2) Use workaround. Or do not run make test. (and hope it works)
> 
> 3) Port DBD::Oracle module to 64-bit.
> 
> 4) Write your own library with _Jv_RegisterClasses symbol defined
> and always use LD_PRELOAD option, if HPUX supports it.
> 
>                  Bye. Alex.
> 
> 


Reply via email to