[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