[Lazarus] Using Lazarus to build a (Linux) shared library, with a form

Mark Morgan Lloyd markMLl.lazarus at telemetry.co.uk
Mon Jun 11 14:13:27 CEST 2012


Sven Barth wrote:
> Am 11.06.2012 12:34, schrieb Mark Morgan Lloyd:
>> Sven Barth wrote:
>>> Am 11.06.2012 11:38, schrieb Mark Morgan Lloyd:
>>>> I'm struggling here. I can build a trivial (empty) .so using Lazarus
>>>> 1.1+2.6.0, the only necessary manual operation being to tell the 
>>>> project
>>>> options to remove the (Windows-specific?) -Wr option. I can load the
>>>> result at runtime, although I've not so far put significant code into
>>>> it.
>>>>
>>>> As soon as use Lazarus to add a form to the project, it no longer 
>>>> loads.
>>>> In order to find out what's going wrong I've had to use dlerror(), i.e.
>>>> bypassing the dynlibs library since it doesn't have a function e.g.
>>>> GetLoadErrorStr(). This shows me that the low-level dlopen() is
>>>> complaining "undefined symbol: WSRegisterCustomImageList".
>>>>
>>>> What do I have to manually add to the project to get this working?
>>>>
>>>
>>> Estimated guess: add unit "interfaces" to your library project file.
>>
>> Thanks Sven, that does indeed fix it :-)
>>
>> I was very much at the point of wanting to ask people who knew what they
>> were doing, rather than flail around digging myself into a deeper hole.
>>
> 
> Well... regarding the LCL you should keep in mind that you always need 
> the widgetset implementation and that is provided by the unit 
> "Interfaces". So you need to include that unit in every binary (program, 
> library) were you want to use LCL controls.

It's something I should have spotted, and probably would have done if 
I'd done a file-by-file comparison of the frontend (main program) and 
backend (shared library). But I've also been floundering through other 
issues over the weekend- for example whether the build leaves the .so in 
lib/i386-linux or copies it to the project directory, whether the path 
was being honoured when I was loading the library, whether I had to run 
ldconfig etc.- and it was time to try to eliminate unknowns by asking 
rather than doing.

Anyway, I'm now at the position where I can load the 
most-recently-created backend, and query "about" information. I'm now 
moving on to putting some entries in the backend's form's menu, and 
seeing if I can move them to the frontend.

-- 
Mark Morgan Lloyd
markMLl .AT. telemetry.co .DOT. uk

[Opinions above are the author's, not those of his employers or colleagues]




More information about the Lazarus mailing list