[fpc-devel] Staticaly link C/C++ library (.lib) into FreePascal on Windows
silvioprog
silvioprog at gmail.com
Tue Mar 14 15:57:38 CET 2017
On Tue, Mar 14, 2017 at 9:30 AM, LacaK <lacak at zoznam.sk> wrote:
> Hi,
>
> I have C/C++ librarby (".lib" for Windows and ".a" for Linux) from Intel
> IPP package (they distribute ".lib" and also ".dll" for Windows and ".a"
> for Linux)
>
> Can I link in FPC (on Windows) at compile time to this ".lib" versions ?
> Or only possible way is link at runtime using ".dll" (and distribute DLLs
> with my EXE)?
> (I guess, that FPC can not link to libraries not created in FPC itself. So
> format of supplied ".lib" is not compatible with what FPC expects)
>
> I am trying do something like:
> {$linklib libippi}
> function ippiThreshold_LTValGTVal_8u_C1IR(pSrcDst: PIpp8u; srcDstStep:
> int;
> roiSize: IppiSize; thresholdLT: Ipp8u; valueLT: Ipp8u; thresholdGT:
> Ipp8u;
> valueGT: Ipp8u): IppStatus; external; // 'ippi.dll';
>
> (In Project Options I have path to libippi.a in -Fl)
>
> But I get error: test_IPP.lpr(24,1) Error: Undefined symbol:
> IPP_IPPITHRESHOLD_LTVALGTVAL_8U_C1IR$PIPP8U$LONGINT$IPPISIZE
> $BYTE$BYTE$BYTE$BYTE$$IPPSTATUS
>
test 1: are you on win32? If so, did you try using prefix "_"? eg:
function _ippiThreshold_LTValGTVal_8u_C1IR(pSrcDst: PIpp8u; srcDstStep: int;
roiSize: IppiSize; thresholdLT: Ipp8u; valueLT: Ipp8u; thresholdGT:
Ipp8u;
valueGT: Ipp8u): IppStatus; external;
test 2: put the library implementation below function declaration, eg:
function _ippiThreshold_LTValGTVal_8u_C1IR(pSrcDst: PIpp8u; srcDstStep: int;
roiSize: IppiSize; thresholdLT: Ipp8u; valueLT: Ipp8u; thresholdGT:
Ipp8u;
valueGT: Ipp8u): IppStatus; external;
{$linklib libippi}
fix 1: check which convention your library was compiled, supposing it was
compiled supporting CDECL, you need to specify it on your Pascal binding,
avoiding low-level errors at runtime:
function _ippiThreshold_LTValGTVal_8u_C1IR(pSrcDst: PIpp8u; srcDstStep: int;
roiSize: IppiSize; thresholdLT: Ipp8u; valueLT: Ipp8u; thresholdGT:
Ipp8u;
valueGT: Ipp8u): IppStatus; cdecl; external;
Anyway I've tried to use COFF objects on Windows, but I'm not sure if FPC
supports that because it returns a "illegal COFF magic while reading some
lib". :-/ (on Linux it works like a charm)
> I am doing something wrong or just this is not possible ?
>
> Thank you
> -Laco.
--
Silvio Clécio
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-devel/attachments/20170314/72cf9f41/attachment.html>
More information about the fpc-devel
mailing list