[fpc-devel] Building a static library
Let's start this email by saying that I know perfectly that FPC does not support static libraries, I read all I could find about it. However most reasons talk about that there would be problems if someone tried to use two fpc static libs together because of duplicated symbols. In my case I want to create a iPhone static lib to be used by objective-c and C++ users. Since in this special case there will be one and only one lib written in pascal, I though this would make it possible. I saw that my own iOS projects that were based on templates worked by compiling a static libFPC.a that would be then called by Objective-C. So I did create my own static library by gathering all .o files from FPC into a .a file. I wrote a .h header and added the static lib into a Xcode Objective-C project. Ok, it compiles and links correctly. It calls some of the pascal functions correctly. But.. then it later crashes in one of the pascal functions. Note that I have a lib_init() function called from C that is used to initialize the pascal library, and it calls this undocumented fpc function: procedure internal_initializeunits(); external name 'FPC_INITIALIZEUNITS'; This function from what I understood it calls all units initialization sections, right? Still, I'm missing something... the libFPC.a compiled in xcode templates works fine with Objective-C, but also it does not share any memory back or forward. This seems to be some problem with memory allocation, since only calling any function that creates pascal strings or classes seem to crash the app. Any clue? ___ fpc-devel maillist - fpc-devel@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
Re: [fpc-devel] Building a static library
On 26/08/14 22:47, Sergio Flores wrote: So I did create my own static library by gathering all .o files from FPC into a .a file. I wrote a .h header and added the static lib into a Xcode Objective-C project. Ok, it compiles and links correctly. It calls some of the pascal functions correctly. But.. then it later crashes in one of the pascal functions. Note that I have a lib_init() function called from C that is used to initialize the pascal library, and it calls this undocumented fpc function: procedure internal_initializeunits(); external name 'FPC_INITIALIZEUNITS'; This function from what I understood it calls all units initialization sections, right? On OS X, you must not call that or any other initialisation function manually, because even static libraries can contain an initialisation section on that platform. If you do exactly the same as the iOS Xcode template, then your static library will contain all object files generated for a dynamic library and one of these will already cause the RTL intialisation code to be called. Jonas ___ fpc-devel maillist - fpc-devel@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
Re: [fpc-devel] Building a static library
I've got a static FPC library on iOS that works fine. Don't pass strings back and forth, pass PChar's. Pointer-to-records are OK, too, but I'd think twice regarding objects. On 8/26/2014 4:47 PM, Sergio Flores wrote: Let's start this email by saying that I know perfectly that FPC does not support static libraries, I read all I could find about it. However most reasons talk about that there would be problems if someone tried to use two fpc static libs together because of duplicated symbols. In my case I want to create a iPhone static lib to be used by objective-c and C++ users. Since in this special case there will be one and only one lib written in pascal, I though this would make it possible. I saw that my own iOS projects that were based on templates worked by compiling a static libFPC.a that would be then called by Objective-C. So I did create my own static library by gathering all .o files from FPC into a .a file. I wrote a .h header and added the static lib into a Xcode Objective-C project. Ok, it compiles and links correctly. It calls some of the pascal functions correctly. But.. then it later crashes in one of the pascal functions. Note that I have a lib_init() function called from C that is used to initialize the pascal library, and it calls this undocumented fpc function: procedure internal_initializeunits(); external name 'FPC_INITIALIZEUNITS'; This function from what I understood it calls all units initialization sections, right? Still, I'm missing something... the libFPC.a compiled in xcode templates works fine with Objective-C, but also it does not share any memory back or forward. This seems to be some problem with memory allocation, since only calling any function that creates pascal strings or classes seem to crash the app. Any clue? ___ fpc-devel maillist - fpc-devel@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel ___ fpc-devel maillist - fpc-devel@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel