UClinux Shared Library

Using Shared Library on uClinux
Shared Library support is important for various cases. Especially if you are using uClinux with LGPL library, if there is no Shared Library support with your system, that means you get hit by GPL/LGPL license issue because LGPL library can only be linked by Shared Library (dynamic link) or the application source code needs to be provided to the customer (if the customer wants).

There were various efforts for supporting Shared Library on uClinux so far. This page describes those efforts with corresponding information.

Ridge Run and SnapGear announcement
Ridge Run and SnapGear has announced that they implemented Shared Library on uClinux long time ago.

For more information: http://linuxdevices.com/articles/AT3186625227.html

Ridge Run approach uses ELF format file and Snap Gear approach uses flat file format.

Flat File Format method is supported only for m68knommu targets (older 2.4 & all 2.6)

Ridge Run stopped their business at 2002 but they are now back. Their method is described at: http://www.ridgerun.com/XflatPages/CadenuxXFLATSharedLibraries

When they stopped, some of their code was released under GPL because they had something to do with Texas Instruments. Monta Vista may have some more information on this but currently none has seen Ridge Run's Shared Library implementation code at the open source region.

But after they are back to their business, the new Ridge Run has set up xflat as an open source project at http://www.xflat.org

Kernel 2.4.x status
Shared libraries under uClinux mini-HOWTO: http://www.ucdot.org/article.pl?sid=03/11/25/1126257&mode=thread

But ARM does not support it, see at bottom page: http://www.ucdot.org/article.pl?sid=03/07/24/1333235&mode=thread

Another interesting topic: http://www.ucdot.org/article.pl?sid=03/10/21/2153216&mode=thread

Kernel 2.6.x status
At the moment there are two options for shared support, there's a shared flat format (grep the kernel for CONFIG_BINFMT_SHARED_FLAT), and then there's support for FDPIC ELF (currently only implemented for FR-V). Look at fs/Kconfig.binfmt in a recent 2.6 kernel to get a better idea of your options.

Credit
This rough page was originally created by Shawn Kwon but most of the information were collected from comments of various people including Paul Mundt, Steve Bunch, Tim Bird, Greg Ungerer, Todd Fischer, Alan Carvalho de Assis at celinux-dev mailing list. All the credit should go to them.