From: Jim M. <jim...@wb...> - 2007-05-22 18:00:20
|
Hi, I have a program which compiles fine with MSVC & MSVS, I was trying to get it to compile with mingw but I get a couple of unresolved externals. I am linking against libsecur32.a (-lsecur32), doing an 'nm libsecur32.a' I do not see InitSecurityInterfaceW defined at all, however I do see InitializeSecurityContextW listed by the NM output. Anyone know if this is a known issue with a work-around or not? I have the 3.9 w32api package. I have tried with both the cygwin/mingw and straight msys. Here is the command I am using and the output gcc -Wall -mno-cygwin -Wl,--add-stdcall-alias -D_COMPILE_WIN32 -DUNICODE -D_UNICODE -I./windows -I"C:/Java/jdk1.5.0/include" -I"C:/Java/jdk1.5.0/include/win32" -I../../../../../proto/temp -I./windows -L../../../../../proto/temp -L../../../../../proto/lib/windows -lsecur32 -D_DEBUG -DDEBUG -g -DUNICODE -D_UNICODE -shared -o ../../../../../proto/lib/windows/wbemsec.dll windows/Library.c windows/security.c windows/securesync.c pool.c windows/wbemsec.res /cygdrive/c/DOCUME~1/jmars/LOCALS~1/Temp/cc0X04Zq.o: In function `InitPackage': /home/jmars/gnu/wsi/common/com/wbemsolutions/wbem/security/windows/security.c:72: undefined reference to `_InitSecurityInterfaceW@0' /home/jmars/gnu/wsi/common/com/wbemsolutions/wbem/security/windows/security.c:76: undefined reference to `_QuerySecurityPackageInfoW@8' /cygdrive/c/DOCUME~1/jmars/LOCALS~1/Temp/cc0X04Zq.o: In function `GenClientContext': /home/jmars/gnu/wsi/common/com/wbemsolutions/wbem/security/windows/security.c:205: undefined reference to `_InitializeSecurityContextW@48' collect2: ld returned 1 exit status $ which gcc /mingw/bin/gcc $ gcc --version gcc.exe (GCC) 3.4.2 (mingw-special) Copyright (C) 2004 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
From: James S. <jam...@op...> - 2007-05-22 23:13:06
|
Hi Jim, On Tue, 2007-05-22 at 13:50 -0400, Jim Marshall wrote: > I have a program which compiles fine with MSVC & MSVS, I was trying to > get it to compile with mingw but I get a couple of unresolved externals. > I am linking against libsecur32.a (-lsecur32), doing an 'nm > libsecur32.a' I do not see InitSecurityInterfaceW defined at all, > however I do see InitializeSecurityContextW listed by the NM output. Maybe you are linking against the wrong lib? > Anyone know if this is a known issue with a work-around or not? No idea. > I have the 3.9 w32api package. I have tried with both the cygwin/mingw > and straight msys. Here is the command I am using and the output > > gcc -Wall -mno-cygwin -Wl,--add-stdcall-alias -D_COMPILE_WIN32 -DUNICODE > -D_UNICODE -I./windows -I"C:/Java/jdk1.5.0/include" > -I"C:/Java/jdk1.5.0/include/win32" -I../../../../../proto/temp > -I./windows -L../../../../../proto/temp > -L../../../../../proto/lib/windows -lsecur32 -D_DEBUG -DDEBUG -g > -DUNICODE -D_UNICODE -shared -o > ../../../../../proto/lib/windows/wbemsec.dll windows/Library.c > windows/security.c windows/securesync.c pool.c windows/wbemsec.res > /cygdrive/c/DOCUME~1/jmars/LOCALS~1/Temp/cc0X04Zq.o: In function > `InitPackage': > /home/jmars/gnu/wsi/common/com/wbemsolutions/wbem/security/windows/security.c:72: > undefined reference to `_InitSecurityInterfaceW@0' > /home/jmars/gnu/wsi/common/com/wbemsolutions/wbem/security/windows/security.c:76: > undefined reference to `_QuerySecurityPackageInfoW@8' > /cygdrive/c/DOCUME~1/jmars/LOCALS~1/Temp/cc0X04Zq.o: In function > `GenClientContext': > /home/jmars/gnu/wsi/common/com/wbemsolutions/wbem/security/windows/security.c:205: > undefined reference to `_InitializeSecurityContextW@48' > collect2: ld returned 1 exit status > > $ which gcc > /mingw/bin/gcc > $ gcc --version > gcc.exe (GCC) 3.4.2 (mingw-special) > Copyright (C) 2004 Free Software Foundation, Inc. > This is free software; see the source for copying conditions. There is NO > warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. I don't think this has anything to do with which version of GCC you are using. According to https://msdn2.microsoft.com/en-us/library/aa376103.aspx one of the functions that ld cannot link to is in Secur32.dll, you should include Security.h and link to Secur32.lib, as in; gcc ... -o foo {path-to}/Secur32.lib I found the lib file in /c/Program Files/Microsoft Platform SDK/Lib on my box. Regards, James. |
From: Jim M. <jim...@wb...> - 2007-05-23 04:31:31
|
James Steward wrote: > Hi Jim, > > On Tue, 2007-05-22 at 13:50 -0400, Jim Marshall wrote: >> I have a program which compiles fine with MSVC & MSVS, I was trying to >> get it to compile with mingw but I get a couple of unresolved externals. >> I am linking against libsecur32.a (-lsecur32), doing an 'nm >> libsecur32.a' I do not see InitSecurityInterfaceW defined at all, >> however I do see InitializeSecurityContextW listed by the NM output. > > Maybe you are linking against the wrong lib? > >> Anyone know if this is a known issue with a work-around or not? > > No idea. > >> I have the 3.9 w32api package. I have tried with both the cygwin/mingw >> and straight msys. Here is the command I am using and the output >> >> gcc -Wall -mno-cygwin -Wl,--add-stdcall-alias -D_COMPILE_WIN32 -DUNICODE >> -D_UNICODE -I./windows -I"C:/Java/jdk1.5.0/include" >> -I"C:/Java/jdk1.5.0/include/win32" -I../../../../../proto/temp >> -I./windows -L../../../../../proto/temp >> -L../../../../../proto/lib/windows -lsecur32 -D_DEBUG -DDEBUG -g >> -DUNICODE -D_UNICODE -shared -o >> ../../../../../proto/lib/windows/wbemsec.dll windows/Library.c >> windows/security.c windows/securesync.c pool.c windows/wbemsec.res >> /cygdrive/c/DOCUME~1/jmars/LOCALS~1/Temp/cc0X04Zq.o: In function >> `InitPackage': >> /home/jmars/gnu/wsi/common/com/wbemsolutions/wbem/security/windows/security.c:72: >> undefined reference to `_InitSecurityInterfaceW@0' >> /home/jmars/gnu/wsi/common/com/wbemsolutions/wbem/security/windows/security.c:76: >> undefined reference to `_QuerySecurityPackageInfoW@8' >> /cygdrive/c/DOCUME~1/jmars/LOCALS~1/Temp/cc0X04Zq.o: In function >> `GenClientContext': >> /home/jmars/gnu/wsi/common/com/wbemsolutions/wbem/security/windows/security.c:205: >> undefined reference to `_InitializeSecurityContextW@48' >> collect2: ld returned 1 exit status >> >> $ which gcc >> /mingw/bin/gcc >> $ gcc --version >> gcc.exe (GCC) 3.4.2 (mingw-special) >> Copyright (C) 2004 Free Software Foundation, Inc. >> This is free software; see the source for copying conditions. There is NO >> warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. > > I don't think this has anything to do with which version of GCC you are > using. > > According to https://msdn2.microsoft.com/en-us/library/aa376103.aspx one > of the functions that ld cannot link to is in Secur32.dll, you should > include Security.h and link to Secur32.lib, as in; > gcc ... -o foo {path-to}/Secur32.lib > > I found the lib file in /c/Program Files/Microsoft Platform SDK/Lib on > my box. > > Regards, > James. > Hi James, I was linking to libsecur32.a in the w32api package. I guess the one in w32api is not complete. $ ll /usr/lib/w32api/libsecur32.a -rwxr-x---+ 1 jmars Users 30K Nov 18 2006 /usr/lib/w32api/libsecur32.a* Thanks for the feedback, I hadn't thought to link to the platform SDK's secur32.lib. That does work. -Jim |
From: Brian D. <br...@de...> - 2007-05-23 04:39:27
|
Jim Marshall wrote: > I was linking to libsecur32.a in the w32api package. I guess the one > in w32api is not complete. > > $ ll /usr/lib/w32api/libsecur32.a > -rwxr-x---+ 1 jmars Users 30K Nov 18 2006 /usr/lib/w32api/libsecur32.a* > > Thanks for the feedback, I hadn't thought to link to the platform > SDK's secur32.lib. That does work. Yes, this is a w32api bug; or rather a missing feature. Submit a patch to add the missing functions to secur32.def (the source file used to create libsecur32.a). Remember that w32api is a user-contributed opensource project, these things don't just magically appear out of nowhere. Brian |
From: Jim M. <jim...@wb...> - 2007-05-23 05:57:31
|
Brian Dessent wrote: > Jim Marshall wrote: > >> I was linking to libsecur32.a in the w32api package. I guess the one >> in w32api is not complete. >> >> $ ll /usr/lib/w32api/libsecur32.a >> -rwxr-x---+ 1 jmars Users 30K Nov 18 2006 /usr/lib/w32api/libsecur32.a* >> >> Thanks for the feedback, I hadn't thought to link to the platform >> SDK's secur32.lib. That does work. > > Yes, this is a w32api bug; or rather a missing feature. Submit a patch > to add the missing functions to secur32.def (the source file used to > create libsecur32.a). Remember that w32api is a user-contributed > opensource project, these things don't just magically appear out of > nowhere. > > Brian > Hi Brian, Good point! I should have pointed this out previously, while libsecure32.a does not have a 'InitSecurityInterfaceW@0' function in it, it *does* have '_InitializeSecurityContextW@48' in it: $ nm /usr/lib/w32api/libsecur32.a |grep InitializeSecurityContextW 00000000 T _InitializeSecurityContextW@48 00000000 I __imp__InitializeSecurityContextW@48 So I'm not sure why that was coming up as an undefined reference (other functions defined in libsecur32.a file were evidently found). I will try to figure out how to submit a patch. -Jim |
From: Brian D. <br...@de...> - 2007-05-23 08:24:03
|
Jim Marshall wrote: > $ nm /usr/lib/w32api/libsecur32.a |grep InitializeSecurityContextW > 00000000 T _InitializeSecurityContextW@48 > 00000000 I __imp__InitializeSecurityContextW@48 > > So I'm not sure why that was coming up as an undefined reference That is because you've got your link command order screwed up. Move -lsecur32 to the end after the objects that use functions from it. Order matters. For the record, in my opinion it's much simpler and definitive to just look at the .def file to see what functions a given w32api import library contains than fooling around with nm and grep. You can view the file in CVS trivially: http://sourceware.org/cgi-bin/cvsweb.cgi/src/winsup/w32api/lib/secur32.def?cvsroot=src http://sourceware.org/cgi-bin/cvsweb.cgi/~checkout~/src/winsup/w32api/lib/secur32.def?content-type=text/plain&cvsroot=src Brian |
Re: [Mingw-users] undefined reference
to`_InitSecurityInterfaceW@0'&'_InitializeSecurityContextW@48'
From: Brian D. <br...@de...> - 2007-05-23 18:35:50
|
Jim Marshall wrote: > Forgive me for my ignorance, where do I send the info about adding > InitSecurityInterfaceW@0 to the .def file - the devel list? Also since > it is just two functions should I simply list them or send an actual > diff output? Basically they need to add > > InitSecurityInterfaceA@0 > InitSecurityInterfaceW@0 > > to the def file. Well technically yes it's just a matter of adding those two lines, but things always work faster when you provide a patch+ChangeLog so that the maintainer can just apply them. You can create a patch (using diff -u) of the changes and submit it to the path tracker at sourceforge. If at all possible, include a ChangeLog entry -- see the GNU coding standards or look at existing ChangeLog entries. But do not include the changes to the file 'ChangeLog' as part of the diff, just paste what would go at the top of ChangeLog separately. Brian |
From: Jim M. <jim...@wb...> - 2007-05-23 18:19:10
|
Brian Dessent wrote: > Jim Marshall wrote: > >> $ nm /usr/lib/w32api/libsecur32.a |grep InitializeSecurityContextW >> 00000000 T _InitializeSecurityContextW@48 >> 00000000 I __imp__InitializeSecurityContextW@48 >> >> So I'm not sure why that was coming up as an undefined reference > > That is because you've got your link command order screwed up. Move > -lsecur32 to the end after the objects that use functions from it. > Order matters. > > For the record, in my opinion it's much simpler and definitive to just > look at the .def file to see what functions a given w32api import > library contains than fooling around with nm and grep. You can view the > file in CVS trivially: > > http://sourceware.org/cgi-bin/cvsweb.cgi/src/winsup/w32api/lib/secur32.def?cvsroot=src > http://sourceware.org/cgi-bin/cvsweb.cgi/~checkout~/src/winsup/w32api/lib/secur32.def?content-type=text/plain&cvsroot=src > > Brian > Brian, Forgive me for my ignorance, where do I send the info about adding InitSecurityInterfaceW@0 to the .def file - the devel list? Also since it is just two functions should I simply list them or send an actual diff output? Basically they need to add InitSecurityInterfaceA@0 InitSecurityInterfaceW@0 to the def file. Thanks -Jim |
From: Keith M. <kei...@to...> - 2007-05-24 08:30:58
|
Jim Marshall wrote: > Forgive me for my ignorance, where do I send the info about adding > InitSecurityInterfaceW@0 to the .def file - the devel list? Absolutely NOT. All such submissions should go to the patch tracker: https://sourceforge.net/tracker/?func=add&group_id=2435&atid=302435 For the record, the devel list is a private list, for internal use by the project developers; if you are not a member of the project team, anything you try to post there will simply be discarded, unread. Anyone who is interested in actively participating in the project is welcome to join the team; just drop a note to min...@li... stating your level of interest, how you would like to contribute, and your SF user name, and I'll set it up for you; see http://www.mingw.org/MinGWiki/index.php/JoinTheDevelopersList for more info. > Also since it is just two functions should I simply list them or send > an actual diff output? `diff -u' format patches, please, accompanied by a ChangeLog entry, as already stated in Brian Dessent's reply: > things always work faster when you provide a patch+ChangeLog so that > the maintainer can just apply them. You can create a patch (using > diff -u) of the changes and submit it to the [patch] tracker at > sourceforge. If at all possible, include a ChangeLog entry -- see the > GNU coding standards or look at existing ChangeLog entries. But do > not include the changes to the file 'ChangeLog' as part of the diff, > just paste what would go at the top of ChangeLog separately. If you just ask something like this... > Basically they need to add > > InitSecurityInterfaceA@0 > InitSecurityInterfaceW@0 ...it may still get done, (Chris Sutcliffe has already taken pity on you, on this occasion), but a well formed patch, with suitable ChangeLog, has a much better chance of quick adoption. Regards, Keith. |
From: Jim M. <jim...@wb...> - 2007-05-24 10:22:01
|
Keith MARSHALL wrote: > > > > Jim Marshall wrote: >> Forgive me for my ignorance, where do I send the info about adding >> InitSecurityInterfaceW@0 to the .def file - the devel list? > > Absolutely NOT. All such submissions should go to the patch tracker: > > https://sourceforge.net/tracker/?func=add&group_id=2435&atid=302435 > > For the record, the devel list is a private list, for internal use by > the project developers; if you are not a member of the project team, > anything you try to post there will simply be discarded, unread. > > Anyone who is interested in actively participating in the project is > welcome to join the team; just drop a note to > > min...@li... > > stating your level of interest, how you would like to contribute, and > your SF user name, and I'll set it up for you; see > > http://www.mingw.org/MinGWiki/index.php/JoinTheDevelopersList > > for more info. > >> Also since it is just two functions should I simply list them or send >> an actual diff output? > > `diff -u' format patches, please, accompanied by a ChangeLog entry, as > already stated in Brian Dessent's reply: >> things always work faster when you provide a patch+ChangeLog so that >> the maintainer can just apply them. You can create a patch (using >> diff -u) of the changes and submit it to the [patch] tracker at >> sourceforge. If at all possible, include a ChangeLog entry -- see the >> GNU coding standards or look at existing ChangeLog entries. But do >> not include the changes to the file 'ChangeLog' as part of the diff, >> just paste what would go at the top of ChangeLog separately. > > If you just ask something like this... > >> Basically they need to add >> >> InitSecurityInterfaceA@0 >> InitSecurityInterfaceW@0 > > ...it may still get done, (Chris Sutcliffe has already taken pity on you, > on this occasion), but a well formed patch, with suitable ChangeLog, has > a much better chance of quick adoption. > > Regards, > Keith. > > Thanks for the help, especially to Chris for taking pity on me ;) -Jim |
From: Chris S. <ir0...@gm...> - 2007-05-23 18:44:54
|
> Forgive me for my ignorance, where do I send the info about adding > InitSecurityInterfaceW@0 to the .def file - the devel list? Also since > it is just two functions should I simply list them or send an actual > diff output? Basically they need to add > > InitSecurityInterfaceA@0 > InitSecurityInterfaceW@0 > > to the def file. You could supply a patch by adding it to the patch tracker: https://sourceforge.net/tracker/?group_id=2435&atid=302435 Cheers! Chris -- Chris Sutcliffe http://ir0nh34d.googlepages.com http://ir0nh34d.blogspot.com http://emergedesktop.org |
From: Chris S. <ir0...@gm...> - 2007-05-23 18:50:54
|
> > Forgive me for my ignorance, where do I send the info about adding > > InitSecurityInterfaceW@0 to the .def file - the devel list? Also since > > it is just two functions should I simply list them or send an actual > > diff output? Basically they need to add > > > > InitSecurityInterfaceA@0 > > InitSecurityInterfaceW@0 > > > > to the def file. > > You could supply a patch by adding it to the patch tracker: > > https://sourceforge.net/tracker/?group_id=2435&atid=302435 Since this is so minor, I've gone ahead and made the change to CVS (will commit later today when I get home). For future reference, please you the patch tracker. Thanx! Chris -- Chris Sutcliffe http://ir0nh34d.googlepages.com http://ir0nh34d.blogspot.com http://emergedesktop.org |