- Lazarus/FPC Libraries/ru
- Contents
- Схожие темы
- Основное
- Операционные системы
- FreeBSD
- macOS
- Linux
- Windows
- ppumove, .ppu, .ppl
- Loadlibrary — загрузка динамической библиотеки
- Инициализация
- Финализация
- Версии, распространение
- Installing Lazarus on Linux
- Contents
- Introduction
- Required Linux packages
- Make a Choice
- The Package Manager Model
- FPC and Lazarus from SourceForge
- Build Lazarus from Source
- Get the Lazarus Source
- Menu items and Icons
- What does the BigIDE argument to make do?
- FPCUPdeluxe
- See Also
- Other Relevent Pages
- Testing FPC installation
Lazarus/FPC Libraries/ru
Эта страница содержит информацию о том, как создавать библиотеки с помощью Lazarus/FPC и как использовать их в проектах и пакетах.
Contents
Схожие темы
- Creating bindings for C libraries — Как преобразовать заголовочные файлы языка C (с расширением .h) в модули на паскале.
Основное
Статическая компоновка: FPC по умолчанию компилирует и компонует статичные исполняемые файлы. Это значит, что компилятор дает команду компоновщику взять все объектные файлы (с расширением .о) в проекте и все пакеты, а затем собрать их в один большой исполняемый файл. Преимущества: нет внешних зависимостей. Недостатки: Разные программы на одном компьютере не могут использовать общий код, и вы не сможете загружать/выгружать подключаемые модули.
Динамические библиотеки: Идея динамических библиотек в том, чтобы разделять общий одинаковый код между программами, сохраняя таким образом память и сокращая время на запуск часто используемых библиотек и подключаемых модулей. Недостатками такого подхода являются снижение скорости редко используемых библиотек, сложное внутреннее устройство (это больше проблема для компилятора) и то, что инициализация раздельна (см. ниже) и требуется система версий, чтобы получить совместимый код.
Операционные системы
Операционная система | Динамическая библиотека | Статичная библиотека | ‘Префикс библиотеки |
---|---|---|---|
FreeBSD | .so | .a | lib |
macOS | .dylib | .a | lib |
Linux | .so | .a | lib |
Windows | .dll | .lib | — |
Haiku | .so | .a | lib |
FreeBSD
macOS
Linux
Имя файла динамической библиотеки всегда имеет вид ‘lib+’имя’+’.so’+версия. Пример: libz.so.1 и libz.so.1.2.2. Linux ищет библиотеку в местах, путь к которым прописан в переменной окружения LD_LIBRARY_PATH, затем в /lib, /usr/lib и наконец в директориях, пути к которым прописаны в файле /etc/ld.so.conf.
Чтобы была возможность разделять память (использовать GetMem/FreeMem, строки, динамические массивы и т.д.) с другими библиотеками (написанными не в FPC) в Linux, необходимо в раздел uses главного файла проекта (обычно .lpr) добавить модуль cmem (нужно вписать его самым первым, до инициализации других модулей!).
Windows
Windows ищет библиотеку в текущей директории, затем системной директории и в переменной окружения PATH.
ppumove, .ppu, .ppl
FPC обычно создает для каждого модуля файлы с расширением .ppu и .o. файл .ppu содержит всю важную информацию из файла .pas/.pp (типы, требуемые объектные файлы .о), тогда как файл .о содержит ассемблерный код и измененные имена, понимаемые текущей системой. Инструмент ppumove, входящий в любую установку FPC, конвертирует файлы .ppu и .o в динамическую библиотеку. Это достигается засчет вызова компоновщика для сборки всех объектных файлов с расширением .о в файл с расширением .so (или .dll в Windows) с последующим удалением записей об объектных файлах из файла .ppu. Обычно такой новый .ppu файл переименовывается в .ppl. Пример: Перейдите в директорию с пакетом (ту, в которой находятся файлы .ppu): ppumove -o имя_пакета -e ppl *.ppu Эта команда конвертирует все файлы .ppu в .ppl и создаст файл libимя_пакета.so (в windows — имя_пакета.dll). Запомните, что в Linux префикс ‘lib’ добавляется всегда.
Эта новая библиотека может использоваться и другими языками программирования, например C или C++. Или в других программах FPC, с помощью использования external модификаторов. Но секции инициализации/финализации должны вызываться автоматически. Включая инициаллизацию/финализацию менеджера «кучи». Это означает, что не получится использовать строки или GetMem/FreeMem. Но программисты могут добиться большего какими-то своими способами.
Loadlibrary — загрузка динамической библиотеки
Загрузка динамической библиотеки проще с функцией dlopen Loadlibrary из модуля unit dl dynlibs. С версии 1.9.4, dynlibs предоставляет портируемую альтернативу модулю dl. Запомните, что использование модуля dl вместо dynlibs обычно приводит к невозможности портирования между разными системами. Главная проблема — получить имя файла, которое зависит от версии и операционной системы. С версии 2.2.2, в модуле dynlibs появилась константа sharedsuffix, которая упростит этот процесс. Она позволяет получить правильное расширение (dll/so/dylib).
Инициализация
Любой модуль содержит раздел инициализации. Порядок инициализации записан в разделе uses каждого модуля.
Как инициализировать динамическую библиотеку: в разработке.
Финализация
Каждый модуль содержит раздел финализации. Порядок обратный по отношению к порядку инициализации.
Версии, распространение
Библиотеки имеют тенденцию разрастаться и меняться постоянно. Добавление новых возможностей не будет проблемой, а вот удаление метода или изменение его параметров вызовет несовместимость разных версий библиотек. Это значит, любая установленная библиотека (.so, .dll, .dylib) замещается совместимой или новая бибиотека должна быть добавлена в систему. Поэтому каждая библиотека и содержит номер версии. Чтобы загрузить динамическую библиотеку (dlopen из unit dl), должно быть известно правильное имя файла. Под Linux это значит, что вы должны знать и номер версии (т.к. библиотеки оканчиваются на .so.номер_версии). В разработке: IDE сможет создавать номера версий.
Источник
Installing Lazarus on Linux
Contents
Introduction
This page is about installing FPC and Lazarus on a Linux system. Its intended for new and ‘regular’ users, it does not cover some very advanced methods and concentrates on current releases. Linux users should think of FPC and Lazarus as being two distinct but related processes, FPC does not change much, on the other hand, you will probably want to update your Lazarus install or perhaps install multiple Lazarus versions. Mixing the install methods, especially after V2.0 may cause problems so please read carefully.
Notes about terms used on this page —
- We refer to various downloadable files such as fpc_something — you should replace the ‘something’ with whats appropriate for your system, for example, early 2019 using a DEB based 64bit distro it might be fpc-laz_3.0.4-1_amd64.deb. Mid 2021 lazarus-something.deb is lazarus-project_2.0.12-0_amd64.deb.
- Package Manager means a range of things on different different Linux systems. While we give command line examples, thats just because its easier to write. You will get the same result if you use your favourite GUI Tool such as Synaptic, Ubuntu Software Centre or YaST2. Maybe try double clicking on a downloaded package in your file manager.
- What ever Package manager tool you use, make sure you are using one that resolves dependencies (that is, it also installs thing that are required by the main package you are installing), most GUI apps do. You should avoid using tools like dpkg or rpm and instead use apt or yum depending on your flavour of Linux.
Required Linux packages
According to forum member «MarkMLl», required Debian packages for Lazarus are:
- build-essential
- gdb
- libgpm-dev (formerly libgpmg1-dev)
- libncurses5-dev
- libncursesw5-dev
Make a Choice
You do need to decide, early on, where you will be getting your Lazarus install from. You can, at any stage change your mind but at the cost of some backtracking. We don’t recomend you get your FPC and Lazarus install kits from different places, its sometimes possible but sometimes unreliable. Broadly, your choices are —
- Use your Package Manager to install both FPC and Lazarus. This means you are locked into the version of Lazarus that your distribution maintainers offer. Due to distro and Lazarus release cycles being out of sync, at any one time, its unlikely that your distribution will have the latest release of Lazarus. And many users do find those new releases attractive. You can install only one version of Lazarus under this model. But on the other hand, using the package manager approach is very easy and probably suits casual users.
- Use the pre compiled packages (both FPC and Lazarus) made available by the FPC/Lazarus Team at SourceForge. Here you will find a wide choice of matched versions but you can only install one version at a time. The install process is still very easy ! This is possibly the best bet for new users.
- Install FPC from either your Package Manager or SourceForge and then download the Lazarus source code and compile it yourself. May take a touch longer but is almost as easy and you do end up with the ability to add extra Lazarus installs, perhaps a ‘production’ version and a version based on the next release candidate. Or an old version to work on legacy code. In addition, you can easily make your own changes to the Lazarus Component Library, maybe just debug statements, maybe additional features you can feed back to help improve Lazarus further.
- Use FPCUPdeluxe — it can install a range of versions of both FPC and Lazarus for you without requiring you to understand the underlying structure.
The Package Manager Model
If you are happy with the versions offered by your distribution this might be the way to go. Almost all Linux distributions come with some sort of Package Manager, you are probably familiar with your’s. Between then, the DEB and RPM based package systems represent much of the Linux community. And if you soon run into the limitations of this model, your package manager will help you back out again. But first, check the version available. Look up ‘lazarus’ in your GUI Package Manager or do —
Note the names as well as the versions, we need three packages, fpc-something, fpc-source-something and, finally lazarus_something. Assuming you distribution’s package has its dependencies set up correctly, all you need do is choose to install Lazarus in either your Package Manage GUI or do:
- Some distro prepared packages do not include the tools necessary to add cross compiling to its capabilities. If you may want to cross compile in the future, please consider one of the next listed models.
- Some distro package managers break Lazarus up in small ‘chunks’, by default you get the GTK2 chunks. If you plan to use Qt5 also install libqt5pas-dev and lcl-qt5. You can make Qt5 apps using the GTK2 IDE.
- If you plan to work with GTK3, you will need to install libgtk-3-dev, its not declared as a dependency of Lazarus yet because the GTK3 interface is not, yet, complete.
FPC and Lazarus from SourceForge
If your Package Manager cannot offer you the correct version of FPC then SourceForge can ! But be prepared for your package manager to complain about being bypassed, just insist you know what you are doing !
All packages can be found at https://sourceforge.net/projects/lazarus/files/ , if you want just FPC, you will find it down in the corresponding Lazarus release directory.
Navigate down, select the appropriate packages, again, fpc_something, fpc-src_something and lazarus_something, save them locally and install. WARNING, very important, this catches many users out ! Like most Linux packages, these packages have dependencies, you must install using a tool that resolves dependencies. Commands like «dpkg -i fpc_something.deb» will, most definitely leave an incomplete installation !
Further, you will probably need to manually install at least gdb, the GNU debugger. Not absolutely essential but it makes life a lot easier. If you plan to work with GTK3, or Qt5 you will need to manually install libgtk-3-dev or libqt5pas-dev.
On a DEB based System. On a older DEB based system, you almost certainly should use gdebi to install any downloaded DEB. It might already be installed, if not, install it first. You can use gdebi at the command line or double click a downloaded package in your file manager. But remember, most important, install first fpc, then fpc-src, then and only then, Lazarus. On more recent deb based systems, the apt command can resolve dependencies, you could then use this command (but note the very important ./ in front of each deb file, if you don’t specify the exact location of your downloaded deb file, it will go and get the repository based one) —
mid 2021 for example, you might type (after downloading these files) —
On an RPM Based System Installing downloaded packages at the command line as shown below. (Author is unaware of the GUI Package tool that does, in fact, resolve dependancies) —
Note : later RPM based systems use the dnf command instead of yum, same syntax.
Build Lazarus from Source
Surprisingly easy, but that is because Lazarus routinely rebuilds itself, eg when a Lazarus package is added. So, its also a useful test that all required dependencies are really present. It allows you to have multiple versions of Lazarus installed (see —pcp=xxx) and both Lazarus and LCL are in your own disk space so no write issues. However, you will need to manually add an entry in your OS Menu system and, perhaps distinctive Lazarus icons.
Note: Remember, FPC and Lazarus are two, separate products. Before thinking about building Lazarus, you must have a working and tested FPC. Mid 2020 FPC 3.2.0 was released and its probably what you want. Some distributions may not have it for awhile so, you need to install it from one of the ways documented on https://wiki.lazarus.freepascal.org/Installing_the_Free_Pascal_Compiler#Linux
Note: Dependencies — you probably want to build the GTK2 version of Lazarus, most distros will have gtk2 preinstalled but you may need to install its dev libraries. So, install gdb, libx11-dev and libgtk2.0-dev, that will bring gtk2 itself along if necessary. If building a QT5 version, you will need libqt5pas-dev. If you are going to work with GTK3, you will need to install libgtk-3-dev
Note: Systems with limited memory, such as the Raspberry Pi may need you to increase swap space to at least a Gig before building Lazarus.
The example here pulls down what is a good choice in 2020, the newly released V2.0.10. By time you read this, it is possible a better option is available so please do your research. Note this is not a script, it is a series of commands, to be copied one at a time, so you can see whats happening !
Get the Lazarus Source
There are two different ways to download the Lazarus Source (since August 2021) from gitlab, infact there are several variations of each possible too) —
As a Zip/Tar ball.
If you just want a quick snapshot of trunk, or perhaps want to test the release candidate (and that a great idea) then you may not need access to the developer capabilities that a Git install provides. So, you don’t need any git tools on your local machine and its quick and easy. While you can do it through the Gitlab web interface from https://gitlab.com/freepascal.org/lazarus/lazarus its easier to describe with command line tools, start by cd-ing to a suitable place, I use $HOME/bin/Lazarus, then —
As a git (or svn) repository.
On the other hand, if you will be contributing patches, fixes, to Lazarus, or tracking down bugs by bisecting recent releases, then a proper git install is undoubtedly the way forward. You will need git installed locally, again, go to a suitable directory and —
This is a bit slower process the first time, later you will use git tools to update it and thats a lot faster.
You can now start Lazarus with the command ./lazarus or, if you are in another directory, something like —
You can add that directory to your path, put a script in
/bin to start it or whatever, its Linux, you choose ! Here is an example script to put in your bin directory —
Possible tags to download from gitlab using SVN
- Mid 2021 fixes : lazarus_2_2_0_RC1 the release candidate for next formal release.
- trunk, or as its now known, main. This is the default from gitlab
- Current stable — lazarus_2_0_12
You can see all these options, and lot more on the gitlab site by pulling down the dropbox.
Menu items and Icons
Building from source leaves you without the nice main menu entries and pretty icons that people who installed using packages get. But even that is easy to fix. You need two things, a suitable icon and an appropriate desktop file. Here is how —
First, download a Lazarus icon to use (its just an image, does not need to be from right version of Lazarus),
Then create a desktop file, eg
/.local/share/applications/lazarus.desktop that looks a bit like this
You will almost certainly have to change some things and might want to change more —
- Name= — This is what will appear in your main menu.
- Exec= — This is the path to your executable lazarus, in my case I keep my various installs in
/bin/Lazarus, yours may be different. Its unlikely your user name is ‘myusername’ so please change it. Note that I also include a —pcp command line switch, this tells Lazarus which set of config files to use. If you have multiple installs of Lazarus, make multiple desktop files and make sure each uses a separate set of config files. Most important ! You might like to point this item to the little bash script mentioned above, its an easy way of ensuring Lazarus gets the FPC path setting.
What does the BigIDE argument to make do?
The bigide make argument adds a bunch of packages to Lazarus that many find useful and cannot do without. The packages that are added are:
|
|
|
The above list is sourced from the [Lazarus source directory]/IDE/Makefile.fpc and may be subject to change.
Note that if you have not compiled your own Lazarus IDE with the bigide argument, you can install any of these packages yourself using the Lazarus IDE Package > Install/Uninstall Packages. dialog.
FPCUPdeluxe
Another approach is fpcupdeluxe, its an application that you run on your computer to manage your FPC / Lazarus install. Its very suited to people who just want to get a working install quickly and are happy to allow fpcupdeluxe to do the thinking for them.
See Also
Other Relevent Pages
- Installing_the_Free_Pascal_Compiler
- Generic Installing_Lazarus
- Install the help system, Installing_Help_in_the_IDE
- A number of useful additions but in particular Unit/Identifier Dictionary, Cody.
- Some useful tricks associated with the IDE IDE_tricks
Testing FPC installation
See Testing the FPC Install for a very simple test that FPC is working.
If that worked, well done ! Now proceed to installing Lazarus.
Источник