From: Danny S. <dan...@cl...> - 2006-06-26 02:00:35
|
> -----Original Message----- > From: min...@li... > [mailto:min...@li...] On Behalf > Of Sisyphus > Sent: Monday, June 26, 2006 1:23 PM > > Hi, > I have a cl-built 'JNI.obj' file that contains the symbols ' > _imp__JNI_CreateJavaVM@12' and ' _imp__JNI_CreateJavaVMs@12' > . Those symbols are resolved when the Microsoft linker links > to jvm.lib - which is part of Sun's java distro. (There's > only *one* underscore in front of 'imp'.) > > I also have the corresponding gcc-built 'JNI.o' file that > contains the same symbols. But when gcc links to jvm.lib, I > get the "undefined reference" error (see below for full output). > > In the '.obj' file, the '.o' file, and 'jvm.lib' there are > two underscores in front of 'imp'. > > Admittedly this is very sparse information, but does anyone > know what the problem might be ? 'jvm.lib' is certainly being > found (as failure to locate it throws up an error message), > but the symbol is not being resolved. The actual command > that's failing is: > > gcc -shared -o JNI.dll > JNI.o -LD:\perl58_M\5.8.8\lib\CORE -LF:\java\jdk1.5.0_07\lib > -lperl58 -ljvm > Do any of the directories in your library search path contain JVM.DLL? ld may be attempting to link directly to the dll, since until recently, foo.dll had higher precedence than foo.lib in search order Danny |
From: Danny S. <dan...@cl...> - 2006-06-26 07:57:30
|
> -----Original Message----- > From Sisyphus > Sent: Monday, June 26, 2006 2:40 PM > ----- Original Message ----- > From: "Danny Smith" < > . > . > >> The actual command that's failing is: > > > > > > gcc -shared -o JNI.dll > > > JNI.o -LD:\perl58_M\5.8.8\lib\CORE -LF:\java\jdk1.5.0_07\lib > > > -lperl58 -ljvm > > > > > > > Do any of the directories in your library search path > contain JVM.DLL? > > ld may be attempting to link directly to the dll, since until > > recently, foo.dll had higher precedence than foo.lib in search order > > > > Hadn't thought of that .... but, no - I don't think jvm.dll > even exists. If I rename 'jvm.lib' to (say) 'jvm_hide.lib', > then when I re-run the above command ld.exe produces the > following error: I assumed that jvm.lib was a dll import lib from the unresolved names `_imp__JNI_CreateJavaVM@12' There used to be a problem with MS 'short format' import libs, but that has been fixed since about March 2005. What is version of ld? Danny |
From: Sisyphus <sis...@op...> - 2006-06-27 00:36:16
|
----- Original Message ----- From: "Danny Smith" . . > > > > Hadn't thought of that .... but, no - I don't think jvm.dll > > even exists. . > I assumed that jvm.lib was a dll import lib from the unresolved names > `_imp__JNI_CreateJavaVM@12' > You're right, of course - 'jvm.dll' does exist ... still finding my way with this - I just wasn't looking in the right place. > There used to be a problem with MS 'short format' import libs, but that > has been fixed since about March 2005. > What is version of ld? > I had: GNU ld version 2.15.91 20040904 so I've now installed binutils-2.16.91-20060119-1 ... and the problem has vanished :-) Thanks, Danny. Cheers, Rob |
From: Sisyphus <sis...@op...> - 2006-06-26 02:43:30
|
----- Original Message ----- From: "Danny Smith" < . . >> The actual command that's failing is: > > > > gcc -shared -o JNI.dll > > JNI.o -LD:\perl58_M\5.8.8\lib\CORE -LF:\java\jdk1.5.0_07\lib > > -lperl58 -ljvm > > > > Do any of the directories in your library search path contain JVM.DLL? > ld may be attempting to link directly to the dll, since until recently, > foo.dll had higher precedence than foo.lib in search order > Hadn't thought of that .... but, no - I don't think jvm.dll even exists. If I rename 'jvm.lib' to (say) 'jvm_hide.lib', then when I re-run the above command ld.exe produces the following error: ld.exe: cannot find -ljvm collect2: ld returned 1 exit status Similarly, having renamed 'jvm.lib' to 'jvm_hide.lib', if I then link with '-ljvm_hide' the 2 familiar undefined references again crop up. Cheers, Rob |