[fpc-pascal] Statically link library
ludo.brands at free.fr
Sun Apr 21 18:35:16 CEST 2013
On 04/21/2013 05:20 PM, Darius Blaszyk wrote:
> <retrying with a smaller zip>
> I have prepared a minimal example of the linking problems I get. Just
> unzip, create a "build" dir and run cmake. I'm using gcc 4.6.2.
> As soon as I try to use the function "file_size" I get the following
> linker errors:
> Free Pascal Compiler version 2.6.2 [2013/03/17] for i386
> Copyright (c) 1993-2012 by Florian Klaempfl and others
> Target OS: Win32 for i386
> Compiling test.pp
> Compiling test_h.pas
> Linking project1.exe
> test.pp(9,1) Error: Undefined symbol: _open
> test.pp(9,1) Error: Undefined symbol: _filesize
> test.pp(9,1) Error: Undefined symbol: _close
> test.pp(9,1) Fatal: There were 3 errors compiling module, stopping
> It really seems I need to add an additional library to the pascal source
> or that the linker cannot find some included symbols in libmsvcrt.a.
> Any help appreciated.
A few things wrong in your files:
- the c program. When you want to link against msvcrt then you better
use the ms functions;) There is no filesize, or open, or close (the
latter are deprecated since a while and not present anymore in msvcrt)
int file_size(char * name)
int file, size;
if (name == 0) return(0);
file = _open(name, O_RDONLY);
if (file == -1) return (0);
size = _filelength(file);
- the binding:
function file_size(Name: PChar): cint; cdecl;external ;
This runs correctly on my system.
I have attached the modified files and the 2 .a files (windows x86). The
MakeFile.win created by wxDev-C++ is included. I renamed the
Output/MingW/Project1.a to libtest.a. When using wxDev-C++ make sure to
set the file to compile as a C file. Default is C++ and that uses a
different name mangling.
-------------- next part --------------
A non-text attachment was scrubbed...
Size: 33060 bytes
Desc: not available
More information about the fpc-pascal