WAYFARER писал(а):Что то вы похоже где то перемудрили, если у вас в принципе такая проблема встала.
Вы делаете библиотеку, которую использует некое стороннее приложение? Если обязательно нужно проверять версии библиотеки, что мешает добавить функцию? прямо в этой же библиотеки. Что то типа
- Код: Выделить всё
- function GetVersion (): Pchar; stdcall;
 begin
 result := Pchar('1.1.3');
 end;
и меняйте версию при каждом новом релизе либы.
Менять вручную ?? Не наш метод
Добавлено спустя 2 минуты 52 секунды:mrPG писал(а):Поскольку библиотеку создаю я сам, то информация о номере версии в файлах и приложения, и библиотеки есть.
Кто вам сказал, что она есть? почитайте про структуру elf файлов.
 
Можно и почитать, но для приложения, которое обращается к библиотеке,  на fpc/Lazarus номер версии прекрасно определяется с помощью TFileVersionInfo с определением имени файла через paramstr(1), Для библиотеки определить имя файла из программы не получается
Добавлено спустя 3 минуты 39 секунд:Alexx2000 писал(а):Если и программа и библиотека на FPC, то версию можно прочитать так:
- Код: Выделить всё
- uses
 Resource, elfreader, ...
 ...
 function GetFileVersion(const FileName: String): String;
 var
 Version: TVersionInfo;
 begin
 Version:= TVersionInfo.Create;
 try
 Version.Load(FileName);
 with Version.FixedInfo do
 Result:= Format('%d.%d.%d', [FileVersion[0], FileVersion[1], FileVersion[2]]);
 except
 Result:= EmptyStr;
 end;
 Version.Free;
 end;
 ...
 initialization
 TResources.RegisterReader('.so', TElfResourceReader);
 
где FileName полный путь к библиотеке.
 
В этом случае надо задавать полный путь к библиотеке, а он на разных ПК может различаться.
Конечно есть вариант сделать ini-файл, из которого считывать этот путь, но хотелось решить это программно.
Добавлено спустя 33 минуты 26 секунд:Alexx2000 писал(а):Если и программа и библиотека на FPC, то версию можно прочитать так:
- Код: Выделить всё
- uses
 Resource, elfreader, ...
 ...
 function GetFileVersion(const FileName: String): String;
 var
 Version: TVersionInfo;
 begin
 Version:= TVersionInfo.Create;
 try
 Version.Load(FileName);
 with Version.FixedInfo do
 Result:= Format('%d.%d.%d', [FileVersion[0], FileVersion[1], FileVersion[2]]);
 except
 Result:= EmptyStr;
 end;
 Version.Free;
 end;
 ...
 initialization
 TResources.RegisterReader('.so', TElfResourceReader);
 
где FileName полный путь к библиотеке.
 
К сожалению, для *.so получаю сообщение No version info load ((