From: Dock, D. <dio...@me...> - 2011-01-28 01:30:06
|
I've searched and searched for an answer but maybe my Google-fu is weak. We produce a library with VS 2005. When I try to link it into a test program using g++, I get lots of messages like ... C:\Views\dockd_headers\lip__mgls_nt\mgls_nt\src\release\mgls64.lib(./x64/release/lpclsdll.obj):(.text[?messageBox@@YAXPEAD@Z]+0xcb): undefined reference to `__security_check_cookie' C:\Views\dockd_headers\lip__mgls_nt\mgls_nt\src\release\mgls64.lib(./x64/release/lpclsdll.obj):(.xdata[$unwind$?messageBox@@YAXPEAD@Z]+0xc): undefined reference to `__GSHandlerCheck' ... If I recompile our library without the "Buffer Security Check" option (/GS-), then ld.exe crashes after the compile: C:\Temp>C:\mingw_64\bin\x86_64-w64-mingw32-g++.exe checkout.cpp C:\Views\dockd_headers\lip__mgls_nt\mgls_nt\src\release\mgls64.lib -I C:\Views\dockd_headers\lip__mgls_nt\mgls_nt\src\include checkout.cpp: In function 'int main()': checkout.cpp:12:47: warning: deprecated conversion from string constant to 'char *' collect2: ld returned 5 exit status Any thoughts on where `__GSHandlerCheck' and `__security_check_cookie' are defined? There has to be a way to link with a Visual Studio created lib. thanks, -Dion |
From: JonY <jo...@us...> - 2011-01-28 02:09:41
Attachments:
0xED74C077.asc
|
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On 1/28/2011 09:29, Dock, Dion wrote: > I've searched and searched for an answer but maybe my Google-fu is weak. > > We produce a library with VS 2005. When I try to link it into a test program using g++, I get lots of messages like > > ... > C:\Views\dockd_headers\lip__mgls_nt\mgls_nt\src\release\mgls64.lib(./x64/release/lpclsdll.obj):(.text[?messageBox@@YAXPEAD@Z]+0xcb): undefined reference to `__security_check_cookie' > C:\Views\dockd_headers\lip__mgls_nt\mgls_nt\src\release\mgls64.lib(./x64/release/lpclsdll.obj):(.xdata[$unwind$?messageBox@@YAXPEAD@Z]+0xc): undefined reference to `__GSHandlerCheck' > ... > > If I recompile our library without the "Buffer Security Check" option (/GS-), then ld.exe crashes after the compile: > > C:\Temp>C:\mingw_64\bin\x86_64-w64-mingw32-g++.exe checkout.cpp C:\Views\dockd_headers\lip__mgls_nt\mgls_nt\src\release\mgls64.lib -I C:\Views\dockd_headers\lip__mgls_nt\mgls_nt\src\include > checkout.cpp: In function 'int main()': > checkout.cpp:12:47: warning: deprecated conversion from string constant to 'char *' > collect2: ld returned 5 exit status > > Any thoughts on where `__GSHandlerCheck' and `__security_check_cookie' are defined? There has to be a way to link with a Visual Studio created lib. > > thanks, > -Dion Hi, you should never link C++ libraries from different compilers together as they have different ABIs underneath, though C is usually fine. I'm surprised that it even worked. I don't know what __GSHandlerCheck and __security_check_cookie are, possibly found only in MSVC libraries. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.16 (MingW32) iEYEARECAAYFAk1CINUACgkQp56AKe10wHceDgCfd+8im1V+vjcyr6ZM8yQSfzl9 2yIAn1LmLS3Ewef/oK7Aoaj+ai9hKnet =csWK -----END PGP SIGNATURE----- |
From: Dock, D. <dio...@me...> - 2011-01-28 19:03:18
|
I omitted one detail: I compiled my library in Visual Studio as C code (/TC). That's why I expected this to work. Linking with bufferoverflowu.lib gets rid of __security_check_cookie and gshandler.obj supplies __GSHandlerCheck. (As an aside, now that I know what to search for, the results are easy to come by, e.g. http://support.microsoft.com/kb/894573). I'm not sure this is a reasonable solution for my clients, since they would have to get these files from somewhere, and I think gshandler.obj is associated with the VS compiler, not the WinSDK. Now to see whether I can use Microsoft's secure string functions (for example, strcat_s). thanks much, -Dion -----Original Message----- From: Jon [mailto:10...@gm...] On Behalf Of JonY Sent: Thursday, January 27, 2011 5:50 PM To: Dock, Dion Cc: min...@li... Subject: Re: [Mingw-w64-public] undefined reference to __GSHandlerCheck -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On 1/28/2011 09:29, Dock, Dion wrote: > I've searched and searched for an answer but maybe my Google-fu is weak. > > We produce a library with VS 2005. When I try to link it into a test > program using g++, I get lots of messages like > > ... > C:\Views\dockd_headers\lip__mgls_nt\mgls_nt\src\release\mgls64.lib(./x64/release/lpclsdll.obj):(.text[?messageBox@@YAXPEAD@Z]+0xcb): undefined reference to `__security_check_cookie' > C:\Views\dockd_headers\lip__mgls_nt\mgls_nt\src\release\mgls64.lib(./x64/release/lpclsdll.obj):(.xdata[$unwind$?messageBox@@YAXPEAD@Z]+0xc): undefined reference to `__GSHandlerCheck' > ... > > If I recompile our library without the "Buffer Security Check" option (/GS-), then ld.exe crashes after the compile: > > C:\Temp>C:\mingw_64\bin\x86_64-w64-mingw32-g++.exe checkout.cpp C:\Views\dockd_headers\lip__mgls_nt\mgls_nt\src\release\mgls64.lib -I C:\Views\dockd_headers\lip__mgls_nt\mgls_nt\src\include > checkout.cpp: In function 'int main()': > checkout.cpp:12:47: warning: deprecated conversion from string constant to 'char *' > collect2: ld returned 5 exit status > > Any thoughts on where `__GSHandlerCheck' and `__security_check_cookie' are defined? There has to be a way to link with a Visual Studio created lib. > > thanks, > -Dion Hi, you should never link C++ libraries from different compilers together as they have different ABIs underneath, though C is usually fine. I'm surprised that it even worked. I don't know what __GSHandlerCheck and __security_check_cookie are, possibly found only in MSVC libraries. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.16 (MingW32) iEYEARECAAYFAk1CINUACgkQp56AKe10wHceDgCfd+8im1V+vjcyr6ZM8yQSfzl9 2yIAn1LmLS3Ewef/oK7Aoaj+ai9hKnet =csWK -----END PGP SIGNATURE----- |
From: Sisyphus <sis...@op...> - 2011-01-28 04:00:03
|
----- Original Message ----- From: "Dock, Dion" <dio...@me...> > Any thoughts on where `__GSHandlerCheck' and `__security_check_cookie' are > defined? There has to be > a way to link with a Visual Studio created > lib. When I build programs with my (64-bit) "Microsoft Platform SDK for Windows Server 2003 R2" compiler, I have to explicitly link to bufferoverflowu.lib (otherwise I get the "undefined reference to `__security_check_cookie'" error). I was also once plagued by the __GSHandlerCheck problem, too. A friend of mine sent me a file called 'gshandler.obj' from somewhere within his (64-bit) VC 8 compiler, and linking to it took care of the problem. I forget the details of how that problem arose - I think I might have been using a library he had compiled using VC 8 with the above-mentioned SDK compiler. Try linking to AMD64/runtmchk.lib (or any other runtmchk.lib you can find) - that might resolve the symbol. I think I still have that gshandler.obj (12kb). If you're wanting to use those libs with mingw-64, then all bets are off. Cheers, Rob |
From: Dock, D. <dio...@me...> - 2011-03-01 00:15:56
|
> -----Original Message----- > From: Jon [mailto:10...@gm...] On Behalf Of JonY > Sent: Thursday, January 27, 2011 5:50 PM > To: Dock, Dion > Cc: min...@li... > Subject: Re: [Mingw-w64-public] undefined reference to __GSHandlerCheck > > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > On 1/28/2011 09:29, Dock, Dion wrote: > > I've searched and searched for an answer but maybe my Google-fu is > weak. > > > > We produce a library with VS 2005. When I try to link it into a test > > program using g++, I get lots of messages like > > > > ... > > > C:\Views\dockd_headers\lip__mgls_nt\mgls_nt\src\release\mgls64.lib(./x6 > 4/release/lpclsdll.obj):(.text[?messageBox@@YAXPEAD@Z]+0xcb): > undefined reference to `__security_check_cookie' > > > C:\Views\dockd_headers\lip__mgls_nt\mgls_nt\src\release\mgls64.lib(./x6 > 4/release/lpclsdll.obj):(.xdata[$unwind$?messageBox@@YAXPEAD@Z]+0xc) > : undefined reference to `__GSHandlerCheck' > > ... > > > > If I recompile our library without the "Buffer Security Check" option (/GS-), > then ld.exe crashes after the compile: > > > > C:\Temp>C:\mingw_64\bin\x86_64-w64-mingw32-g++.exe checkout.cpp > C:\Views\dockd_headers\lip__mgls_nt\mgls_nt\src\release\mgls64.lib -I > C:\Views\dockd_headers\lip__mgls_nt\mgls_nt\src\include > > checkout.cpp: In function 'int main()': > > checkout.cpp:12:47: warning: deprecated conversion from string > constant to 'char *' > > collect2: ld returned 5 exit status > > > > Any thoughts on where `__GSHandlerCheck' and > `__security_check_cookie' are defined? There has to be a way to link with a > Visual Studio created lib. > > > > thanks, > > -Dion > > Hi, > > you should never link C++ libraries from different compilers together as they > have different ABIs underneath, though C is usually fine. I'm surprised that it > even worked. > > I don't know what __GSHandlerCheck and __security_check_cookie are, > possibly found only in MSVC libraries. I tried recompiling the source as C code (not C++) with Visual Studio and these problems still occurred. They go away if I compile the source with gcc. I thought C compilers produced interchangeable code? -Dion |
From: NightStrike <nig...@gm...> - 2011-03-21 13:09:00
|
On Mon, Feb 28, 2011 at 7:16 PM, Dock, Dion <dio...@me...> wrote: >> -----Original Message----- >> From: Jon [mailto:10...@gm...] On Behalf Of JonY >> Sent: Thursday, January 27, 2011 5:50 PM >> To: Dock, Dion >> Cc: min...@li... >> Subject: Re: [Mingw-w64-public] undefined reference to __GSHandlerCheck >> >> -----BEGIN PGP SIGNED MESSAGE----- >> Hash: SHA1 >> >> On 1/28/2011 09:29, Dock, Dion wrote: >> > I've searched and searched for an answer but maybe my Google-fu is >> weak. >> > >> > We produce a library with VS 2005. When I try to link it into a test >> > program using g++, I get lots of messages like >> > >> > ... >> > >> C:\Views\dockd_headers\lip__mgls_nt\mgls_nt\src\release\mgls64.lib(./x6 >> 4/release/lpclsdll.obj):(.text[?messageBox@@YAXPEAD@Z]+0xcb): >> undefined reference to `__security_check_cookie' >> > >> C:\Views\dockd_headers\lip__mgls_nt\mgls_nt\src\release\mgls64.lib(./x6 >> 4/release/lpclsdll.obj):(.xdata[$unwind$?messageBox@@YAXPEAD@Z]+0xc) >> : undefined reference to `__GSHandlerCheck' >> > ... >> > >> > If I recompile our library without the "Buffer Security Check" option (/GS-), >> then ld.exe crashes after the compile: >> > >> > C:\Temp>C:\mingw_64\bin\x86_64-w64-mingw32-g++.exe checkout.cpp >> C:\Views\dockd_headers\lip__mgls_nt\mgls_nt\src\release\mgls64.lib -I >> C:\Views\dockd_headers\lip__mgls_nt\mgls_nt\src\include >> > checkout.cpp: In function 'int main()': >> > checkout.cpp:12:47: warning: deprecated conversion from string >> constant to 'char *' >> > collect2: ld returned 5 exit status >> > >> > Any thoughts on where `__GSHandlerCheck' and >> `__security_check_cookie' are defined? There has to be a way to link with a >> Visual Studio created lib. >> > >> > thanks, >> > -Dion >> >> Hi, >> >> you should never link C++ libraries from different compilers together as they >> have different ABIs underneath, though C is usually fine. I'm surprised that it >> even worked. >> >> I don't know what __GSHandlerCheck and __security_check_cookie are, >> possibly found only in MSVC libraries. > > I tried recompiling the source as C code (not C++) with Visual Studio and these > problems still occurred. They go away if I compile the source with gcc. > > I thought C compilers produced interchangeable code? I'm guessing this is still an issue. How much farther along are you? |
From: Kai T. <kti...@go...> - 2011-03-21 13:12:21
|
2011/3/21 NightStrike <nig...@gm...>: > On Mon, Feb 28, 2011 at 7:16 PM, Dock, Dion <dio...@me...> wrote: >>> -----Original Message----- >>> From: Jon [mailto:10...@gm...] On Behalf Of JonY >>> Sent: Thursday, January 27, 2011 5:50 PM >>> To: Dock, Dion >>> Cc: min...@li... >>> Subject: Re: [Mingw-w64-public] undefined reference to __GSHandlerCheck >>> >>> -----BEGIN PGP SIGNED MESSAGE----- >>> Hash: SHA1 >>> >>> On 1/28/2011 09:29, Dock, Dion wrote: >>> > I've searched and searched for an answer but maybe my Google-fu is >>> weak. >>> > >>> > We produce a library with VS 2005. When I try to link it into a test >>> > program using g++, I get lots of messages like >>> > >>> > ... >>> > >>> C:\Views\dockd_headers\lip__mgls_nt\mgls_nt\src\release\mgls64.lib(./x6 >>> 4/release/lpclsdll.obj):(.text[?messageBox@@YAXPEAD@Z]+0xcb): >>> undefined reference to `__security_check_cookie' >>> > >>> C:\Views\dockd_headers\lip__mgls_nt\mgls_nt\src\release\mgls64.lib(./x6 >>> 4/release/lpclsdll.obj):(.xdata[$unwind$?messageBox@@YAXPEAD@Z]+0xc) >>> : undefined reference to `__GSHandlerCheck' >>> > ... >>> > >>> > If I recompile our library without the "Buffer Security Check" option (/GS-), >>> then ld.exe crashes after the compile: >>> > >>> > C:\Temp>C:\mingw_64\bin\x86_64-w64-mingw32-g++.exe checkout.cpp >>> C:\Views\dockd_headers\lip__mgls_nt\mgls_nt\src\release\mgls64.lib -I >>> C:\Views\dockd_headers\lip__mgls_nt\mgls_nt\src\include >>> > checkout.cpp: In function 'int main()': >>> > checkout.cpp:12:47: warning: deprecated conversion from string >>> constant to 'char *' >>> > collect2: ld returned 5 exit status >>> > >>> > Any thoughts on where `__GSHandlerCheck' and >>> `__security_check_cookie' are defined? There has to be a way to link with a >>> Visual Studio created lib. >>> > >>> > thanks, >>> > -Dion >>> >>> Hi, >>> >>> you should never link C++ libraries from different compilers together as they >>> have different ABIs underneath, though C is usually fine. I'm surprised that it >>> even worked. >>> >>> I don't know what __GSHandlerCheck and __security_check_cookie are, >>> possibly found only in MSVC libraries. >> >> I tried recompiling the source as C code (not C++) with Visual Studio and these >> problems still occurred. They go away if I compile the source with gcc. >> >> I thought C compilers produced interchangeable code? > > I'm guessing this is still an issue. How much farther along are you? Yes, we don't provide __GSHandlerCheck and __security_check_cookie in our runtime. Patches are welcome for this. Nevertheless be careful about mixing VC and gcc compiled code. At least for C++ you will run into issues for sure. The name-mangling isn't standarized and so VC and g++ are using here different mangling algorithms. Kai |
From: Dock, D. <dio...@me...> - 2011-03-29 22:32:31
|
> -----Original Message----- > From: NightStrike [mailto:nig...@gm...] > Sent: Monday, March 21, 2011 6:09 AM > To: Dock, Dion > Cc: min...@li... > Subject: Re: [Mingw-w64-public] undefined reference to __GSHandlerCheck > > On Mon, Feb 28, 2011 at 7:16 PM, Dock, Dion <dio...@me...> > wrote: > >> -----Original Message----- > >> From: Jon [mailto:10...@gm...] On Behalf Of JonY > >> Sent: Thursday, January 27, 2011 5:50 PM > >> To: Dock, Dion > >> Cc: min...@li... > >> Subject: Re: [Mingw-w64-public] undefined reference to > >> __GSHandlerCheck > >> > >> -----BEGIN PGP SIGNED MESSAGE----- > >> Hash: SHA1 > >> > >> On 1/28/2011 09:29, Dock, Dion wrote: > >> > I've searched and searched for an answer but maybe my Google-fu is > >> weak. > >> > > >> > We produce a library with VS 2005. When I try to link it into a > >> > test program using g++, I get lots of messages like > >> > > >> > ... > >> > > >> C:\Views\dockd_headers\lip__mgls_nt\mgls_nt\src\release\mgls64.lib(./ > >> x6 > >> 4/release/lpclsdll.obj):(.text[?messageBox@@YAXPEAD@Z]+0xcb): > >> undefined reference to `__security_check_cookie' > >> > > >> C:\Views\dockd_headers\lip__mgls_nt\mgls_nt\src\release\mgls64.lib(./ > >> x6 > >> > 4/release/lpclsdll.obj):(.xdata[$unwind$?messageBox@@YAXPEAD@Z]+0xc) > >> : undefined reference to `__GSHandlerCheck' > >> > ... > >> > > >> > If I recompile our library without the "Buffer Security Check" > >> > option (/GS-), > >> then ld.exe crashes after the compile: > >> > > >> > C:\Temp>C:\mingw_64\bin\x86_64-w64-mingw32-g++.exe > checkout.cpp > >> C:\Views\dockd_headers\lip__mgls_nt\mgls_nt\src\release\mgls64.lib -I > >> C:\Views\dockd_headers\lip__mgls_nt\mgls_nt\src\include > >> > checkout.cpp: In function 'int main()': > >> > checkout.cpp:12:47: warning: deprecated conversion from string > >> constant to 'char *' > >> > collect2: ld returned 5 exit status > >> > > >> > Any thoughts on where `__GSHandlerCheck' and > >> `__security_check_cookie' are defined? There has to be a way to link > >> with a Visual Studio created lib. > >> > > >> > thanks, > >> > -Dion > >> > >> Hi, > >> > >> you should never link C++ libraries from different compilers together > >> as they have different ABIs underneath, though C is usually fine. I'm > >> surprised that it even worked. > >> > >> I don't know what __GSHandlerCheck and __security_check_cookie are, > >> possibly found only in MSVC libraries. > > > > I tried recompiling the source as C code (not C++) with Visual Studio > > and these problems still occurred. They go away if I compile the source > with gcc. > > > > I thought C compilers produced interchangeable code? > > I'm guessing this is still an issue. How much farther along are you? I could get the problems to go away by linking with Microsoft's gshandler.obj and bufferoverlowu.lib but the latter might not be redistributable. I'm going to compile the library and app with MinGW64. Then there are no issues with these functions missing. -Dion |