Mail Archives: cygwin/2006/03/21/21:36:08
> -----Ursprüngliche Nachricht-----
> Von: skaller <skaller <at> users <dot> sourceforge <dot> net>
> Gesendet: 21.03.06 20:31:08
> On Tue, 2006-03-21 at 19:52 +0100, Bernhard Loos wrote:
> > Hello
> >
> > Is there any progress in solving the problem mentioned in this thread:
> > http://cygwin.com/ml/cygwin/2006-03/msg00274.html ?
>
> The example in that page is bugged and there is no
> reason at all to expect it to work.
>
> The mainline ct.c is a C program, it's compiled
> as a C program, and so cannot interact with C++
> libraries.
If the C++library declares its calls as 'extern "C"' (as it is done in the example),
AFAIK there shouldn't be any problem.
> The mainline of any body of code using C++ MUST be
> compiled as C++. Furthermore you must NOT explicitly
> link libstdc++, that is the job of the compiler.
Yes, but removing the -lstdc++ doesn't make any difference in this example.
> The fact that the example works when libstdc++ is linked
> with the mainline simply suggests an implementation artefact
> that some startup code is stored in the library and the linker
> manages to execute it.
It isn't linked against libstdc++. (At least, I don't see, why ist should be.)
> There's no assurance this is actually initialising everything
> correctly. Some initialisation may need to be done 'on the
> bottom of the stack' and/or before other code, and it is too
> late when a dll is called half way through the program.
>
> --
> John Skaller <skaller at users dot sf dot net>
> Felix, successor to C++: http://felix.sf.net
Anyway all this things aren't really related to the crash.
I removed as much things as possible from the testcase and corrected
the things mentioned above. But I wasn't able to find a solution or even an explaination.
This is a part of the log from depency walker:
00:00:00.438: LoadLibraryA("H:\cygwin\test\CrashTest\CrashTest.dll") called from "CYGWIN1.DLL" at address 0x6100FCB2 by thread 1.
00:00:00.500: Loaded "CRASHTEST.DLL" at address 0x00B40000 by thread 1. Successfully hooked module.
00:00:00.500: DllMain(0x00B40000, DLL_PROCESS_ATTACH, 0x00000000) in "CRASHTEST.DLL" called by thread 1.
00:00:00.500: First chance exception 0xC0000005 (Access Violation) occurred in "CYGWIN1.DLL" at address 0x610AE938 by thread 1.
00:00:00.500: Unloaded "CRASHTEST.DLL" at address 0x00B40000 by thread 1.
00:00:00.516: LoadLibraryA("H:\cygwin\test\CrashTest\CrashTest.dll") returned NULL by thread 1. Error: Unzulssiger Zugriff auf einen Speicherbereich (998).
00:00:00.578: First chance exception 0xC0000005 (Access Violation) occurred at address 0x00B4F37E by thread 1.
00:00:00.578: First chance exception 0xC0000005 (Access Violation) occurred in "CYGWIN1.DLL" at address 0x6108DFFC by thread 1.
00:00:00.578: First chance exception 0xC0000005 (Access Violation) occurred in "CYGWIN1.DLL" at address 0x6108DFFC by thread 1.
00:00:00.578: First chance exception 0xC0000005 (Access Violation) occurred in "CYGWIN1.DLL" at address 0x6108DFFC by thread 1.
The DllMain fails for some reason.
The program crashs with a stack-overflow after a few hundred lines of like the last three.
With 1.5.18, everything works as aspected.
file ct.cc:
-------------------------------------------------------------------------------
#include <stdio.h>
#include <dlfcn.h>
extern "C"
void test();
int main(int argc, char** argv)
{
char* pszdll="./CrashTest.dll";
printf("\n\ndlopening %s\n", pszdll);
void* hDLL = dlopen(pszdll, 0);
if(hDLL)
{
printf("OK\n");
}
else
printf("Error dlopening %s\n", pszdll);
return 0;
}
#ifdef HARDLINKTEST
void TestLinked(char* pszdll)
{
test();
}
#endif
------------------------------------------------------------------
crashtest.cc:
------------------------------------------------------------------
#include <iostream>
extern "C" __declspec(dllexport)
void test()
{
return;
}
-----------------------------------------------------------------
compile with:
g++ -W -Wall -g -DMAKEDLL -DDEBUG CrashTest.cc -shared -o CrashTest.dll
g++ -g -W -Wall -DUSEDLL -DDEBUG ct.cc -o ctCRASH.exe
g++ -W -Wall -DHARDLINKTEST -DUSEDLL -DDEBUG ct.cc -o ctOK.exe -L./ -lCrashTest
Bernhard Loos
______________________________________________________________________
XXL-Speicher, PC-Virenschutz, Spartarife & mehr: Nur im WEB.DE Club!
Jetzt gratis testen! http://freemail.web.de/home/landingpad/?mc=021130
--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Problem reports: http://cygwin.com/problems.html
Documentation: http://cygwin.com/docs.html
FAQ: http://cygwin.com/faq/
- Raw text -