On 25.05.2011 22:52, Stefan Dösinger wrote: > I'm sorry for the German, I don't know how to change this. Google finds only > other clueless people. Either way it says something like "Inconsistent DLL > binding"
I believe the English translation is “inconsistent DLL linkage”. > > The line in stdlib.h declares _environ as > > _CRTIMP extern char ** _environ; /* pointer to environment table */ > > The compiler just writes a warning, but afterwards linking fails: > > 1>loader.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__environ". > > The linker complains about an "unresolved external symbol __environ". > Removing > our declaration of environ fixes the warning, link error and libwine seems to > work OK. > > I don't know what the proper fix is, please advise. Maybe this code shouldn't > be compiled at all? I don't think I need the loader code on Windows. The underlying issue is probably the _CRTIMP - that's most likely _declspec(dllimport) in MSVC. This matters, as DLL-imported and “plain” extern variables are handled differently on Windows. IIRC DLL export/import of variables is indirect - when DLL-importing a variable you really import a _pointer_ to the variable. So accessing the variable dereferences some pointer. “extern” variables, otoh, are accessed directly (resolving the actual variable location is handled at link-time). -f.r.
signature.asc
Description: OpenPGP digital signature