In Clarion 6.3 build 9058, Softvelocity added a bunch of new API function information to the WIN32.LIB and WININET.LIB library files. This caused a conflict with some other LIB files that included two shared function names, DLLInstall and DLLGetVersion.
There has been a fair amount of discussion about this, some confusion about who should fix this problem and even what exactly the problem is.
The problem, in a nutshell, is that two or more LIB files include the same function name and are both or all included into the same Clarion project or application. This results in the Clarion linker throwing a "Duplicate Symbol" error when it attempts to link in the second LIB file with the duplicate function name.
No. That only takes care of issues with duplicate labels in Clarion. This is duplicate symbol which means that there are two libs that contain the same API function - in this case DLLGetVersion, DLLInstall.
This could be prototyped in two different places like this:
Module('IcetipsWhatever.lib')
IT_DLLGetVersion ...,NAME('DLLGetVersion')
IT_DLLInstall ...,NAME('DLLInstall')
END
MODULE('ABWHatever.Lib')
AB_DLLGetVersion ...,NAME('DLLGetVersion')
AB_DLLInstall ...,NAME('DLLInstall')
END
This will give you two different (Clarion) labels for the functions, but they will still generate a "Duplicate Symbol" errors on IcetipsWhatever.Lib and ABWhatever.Lib which both include those two symbols. So this does not solve this particular problem. However it does solve the problem of possibly duplicate labels for the same (or different) API functions prototyped by different vendors.
This is kind of like the mail man trying to delive a letter to an address only to discover that there are two houses on the same street with the same number.
There are only two ways to fix this as far as I know.
The problem is finding the offending LIB files. Many search utilities won't search inside binary files. The version of the excellent Clarion Source Search that I have does not do it. I highly reccommend it for searching Clarion source though! The search in Total Commander DOES find it - one more reason to get that fantastic program!
I did find one freeware tool that does search binaries (or at least the Clarion LIB files!) without problems, called GrepWin. Very easy to use, supports both straight text search and regular expressions and it is FREE;
Recompile your app to check if the error is gone. Repeat as necessary.
While changing the LIB files can be done by the "end-user" developer, the dynamic loading has to be coded into the product or tool that makes use of the tool and is not reasonable for the end-user to deal with. In 2007 I posted an example application and classes that demonstrate how to do this. If you are interested in loading dlls dynamically at runtime, you can download this small, simple example and try it out yourself.
Hopefully this can help some people who are struggling with the "Duplicate symbol" error in Clarion 6.3 builds 9058 or 9059![]()
-- Arnor Baldvinsson
Comments are not allowed from anonymous visitors.