[fpc-devel] Fix for an annoying error

Michael Van Canneyt michael at freepascal.org
Tue Nov 30 23:03:35 CET 2021


Gareth,

I removed the $linklib for common.dll.

Michael.

On Tue, 30 Nov 2021, J. Gareth Moreton via fpc-devel wrote:

> Well, running the program on the target system isn't a guaranteed 
> success even if there's no error on the compilation system because the 
> DLL in question may be different (or missing).
>
> If it turns out that common.dll is not required, then the maintainer of 
> the package should probably remove the $linklib line, otherwise I'm not 
> sure.  If I'm right in thinking, if the DLL is missing or incompatible, 
> it won't read the exports table and so even if just a warning is raised, 
> it may cause a cascade error if any of its functions are used in the 
> unit because they're not declared.
>
> Gareth aka. Kit
>
> On 30/11/2021 16:22, Michael Van Canneyt via fpc-devel wrote:
>>
>>
>> On Tue, 30 Nov 2021, J. Gareth Moreton via fpc-devel wrote:
>>
>>> That was a conundrum I was trying to answer when making the patch.  
>>> What is a warning and what is an error?
>>>
>>> A lot of the verification code is dependent on compile-time constants 
>>> whose values depend on the compiler's target platform, including 
>>> header sizes, so any mismatch is an error case, and the checking of 
>>> header sizes and the COFF magic number are done together, since the 
>>> correct header size is dependent on the magic number's value.
>>>
>>> I didn't look too much further beyond the verification code, but if 
>>> it's able to detect if a DLL is 32-bit on a 64-bit system and vice 
>>> versa, I feel that's a warning rather than error because, in my 
>>> experience, it's down to a default system configuration (I got the 
>>> error on a freshly-installed machine) rather than something 
>>> untoward.  If the DLL is missing, that should probably be a warning 
>>> too and I'll see if I can make that change.  A corrupted DLL is 
>>> definitely an error though.
>>>
>>> I didn't do a verification to see if the DLL is for AArch64, for 
>>> example, since that situation is more unlikely.  It also starts to 
>>> bloat the compiler code.
>>>
>>> Either way, using a DLL for a different build of Windows is a warning 
>>> at the very least because the project will probably break when you 
>>> try to run it.
>>
>> Personally, I think that reverting to a warning was a mistake.
>>
>> You have no guarantee that the resulting program will run if you 
>> ignore the
>> "error":
>>
>> Not on the system where you compiled, not on the system where you will 
>> run the program.
>>
>> For your particular problem: I looked at the source code of the oracle 
>> unit.
>> As far as I can see there is no need to include the common.dll in the
>> linklib statements, all that should be linked is the oracle dll. It 
>> may be a better solution simply to remove that line.
>>
>> Michael.
>>
>> _______________________________________________
>> fpc-devel maillist  -  fpc-devel at lists.freepascal.org
>> https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
>
> -- 
> This email has been checked for viruses by Avast antivirus software.
> https://www.avast.com/antivirus
>
> _______________________________________________
> fpc-devel maillist  -  fpc-devel at lists.freepascal.org
> https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
>


More information about the fpc-devel mailing list