Подключение *.а файла к проекту

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Ответить
Bishop
новенький
Сообщения: 23
Зарегистрирован: 27.07.2009 18:47:20
Контактная информация:

Подключение *.а файла к проекту

Сообщение Bishop »

Пытаюсь подключить к своему проекту библиотеку lzo 2.03. Собираю её с помощью mingw-w64_x86-64_mingw32_4.4.0-1 и получаю файл liblzo2.a (150кб). Линкую его со своей программой с помощью дерективы {$LINKLIB liblzo2.a}. При компиляции выдаёт следующие ошибки:

Код: Выделить всё

Test.lpr(24,1) Error: Undefined symbol: _memset
Test.lpr(24,1) Error: Undefined symbol: _memcpy

Пробовал подключать libgcc.а, libmsctf.a, libmsvcrt.a - не помогло. Возможно я что-то делаю не так или беру либы не оттуда? Или необходимо при компиляции посылать дополнительные параметры gcc или ar для того, чтобы нужные функции были включены в liblzo2.a.
Использую Lazarus из SVN и FPC 2.3.1 примерно месячной давности (из состава CodeTyphon 0.966). Платформа win64
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Сообщение скалогрыз »

линковать нужно с libc
но т.к. libc это зло (заочно!) то лучше описать эти функции самостоятельно в коде:

Код: Выделить всё

interface
...
procedure memset(P: Pointer; B: Byte; count: Integer);cdecl;
procedure memcpy(dest, source: Pointer; count: Integer);cdecl;

implementation
...
procedure memset(P: Pointer; B: Byte; count: Integer);cdecl;
begin
  FillChar(P^, count, B);
end;

procedure memcpy(dest, source: Pointer; count: Integer);cdecl;
begin
  Move(source^, dest^, count);
end;


если не поможет, то повторить попытку, уже так:

Код: Выделить всё

implementation
...
procedure memset(P: Pointer; B: Byte; count: Integer);cdecl; [public,alias:'_memset'];
begin
  FillChar(P^, count, B);
end;

procedure memcpy(dest, source: Pointer; count: Integer);cdecl; [public,alias:'_memcpy'];
begin
  Move(source^, dest^, count);
end;
Bishop
новенький
Сообщения: 23
Зарегистрирован: 27.07.2009 18:47:20
Контактная информация:

Сообщение Bishop »

Спасибо, второй метод помог. Но всёже есть одно НО (чтобы в дальнейшем знать).
Нигде не могу найти этот самый libc.a. Скорее всего не там ищу. Подскажите плиз где его нужно искать в составе mingw? (а ещё лучше где правильно качать этот самый mingw для win64, а то вдруг не там качаю)
Ответить