Дмитрий Мозулёв Опубликовано 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 ответа на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.