Перейти к содержанию
Fire Monkey от А до Я
  • 0

Shared память


Вопрос

Высматриваю различные примеры, как реализовать разделяемую память в POSIX, например, этот: https://gist.github.com/garcia556/8231e844a90457c99cc72e5add8388e4

В Delphi объявляю функцию:

function shm_open(__name: PByte; __oflag: Integer; __mode: mode_t): Integer; cdecl; external libc name _PU + 'shm_open';

При линковке возникает ошибка:

Цитата

error: undefined reference to 'shm_open'

 

Что я делаю не так?

Изменено пользователем Дмитрий Мозулёв
Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Во FreePascal нашли строки:

Const
  rtlib = 'rt';

function shm_open(__name:Pchar; __oflag:longint; __mode:mode_t):longint;cdecl;external rtlib name 'shm_open';
function shm_unlink(__name:Pchar):longint;cdecl;external rtlib name 'shm_unlink';

Но на Delphi это выдаёт ошибку:

Цитата

[DCC Error] E2597 C:\Program Files (x86)\Embarcadero\Studio\20.0\bin\ld-linux.exe: error: cannot open rt: No such file or directory

 

Ссылка на комментарий
  • 0

Имя rt используется как параметр для компоновщика (в *nix системах ), а он, в свою очередь, компонует библиотеку, которая называется librt.so или librt.a (если используется статическая, версия библиотеки rt).

Поэтому в Delphi нужно писать так:

Unit Posix.Shm; // Посмотрите, может уже такой модуль есть ?

Interface
  
	function shm_open(name : PAnsiChar; oflag : LongInt; mode : mode_t);

Implementation
  
Const
	LibRT = 'librt.so'; // Имя библиотеки. Нечего эту константу светить в секции Interface !

	function shm_open(name : PAnsiChar; oflag : LongInt; mode : mode_t); external LibRT name 'shm_open';

End.

PS:

Рекомендую почитать книгу: Уильям Стивенс UNIX взаимодействие процессов. Там описано, если я точно помню, 2 механизма разделяемой памяти для Unix систем:

  1. Разделяемая память систем, являющихся потомками Unix Sys V.
  2. Разделяемая память Posix.
Изменено пользователем Billy Bones
Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...