Дмитрий Мозулёв Опубликовано 4 июня, 2020 Поделиться Опубликовано 4 июня, 2020 (изменено) Высматриваю различные примеры, как реализовать разделяемую память в 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' Что я делаю не так? Изменено 4 июня, 2020 пользователем Дмитрий Мозулёв Цитата Ссылка на комментарий
0 Дмитрий Мозулёв Опубликовано 4 июня, 2020 Автор Поделиться Опубликовано 4 июня, 2020 Во 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 Billy Bones Опубликовано 30 марта, 2021 Поделиться Опубликовано 30 марта, 2021 (изменено) Имя 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 систем: Разделяемая память систем, являющихся потомками Unix Sys V. Разделяемая память Posix. Изменено 30 марта, 2021 пользователем Billy Bones Цитата Ссылка на комментарий
Вопрос
Дмитрий Мозулёв
Высматриваю различные примеры, как реализовать разделяемую память в POSIX, например, этот: https://gist.github.com/garcia556/8231e844a90457c99cc72e5add8388e4
В Delphi объявляю функцию:
При линковке возникает ошибка:
Что я делаю не так?
Изменено пользователем Дмитрий МозулёвСсылка на комментарий
2 ответа на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.