Есть ли эквивалент Linux для файлов ресурсов Windows?
У меня есть библиотека C, которую я создаю как общий объект для Linux и DLL для Windows с MinGW32. API зависит от нескольких файлов данных (статистических моделей), которые я действительно хотел бы включить в SO/DLL, чтобы развертывание было всего лишь одним файлом.
Похоже, я могу добиться этого для Windows с "файлом ресурсов", скомпилированным с помощью windres
, но потом мне нужно написать кучу кода обработки ресурсов для Windows, и я все еще придерживаюсь файлов в Linux.
Есть ли способ достичь той же функциональности в Linux?
Еще лучше, есть ли переносимое решение?
Ответы
Ответ 1
На самом деле это довольно просто для Linux и других систем ELF: http://www.linuxjournal.com/content/embedding-file-executable-aka-hello-world-version-5967
OS X имеет пакеты, поэтому вы просто создаете свою библиотеку в качестве фреймворка и помещаете файл в пакет.
Ответ 2
Два возможных решения:
-
Библиотека Phong Vo sfio, которая является частью набора инструментов технической поддержки AT & T, является прекрасной заменой для C stdio.h
, и это позволит вам открывать файлы или блоки памяти с помощью одного API. Таким образом, вы можете легко преобразовать ваши существующие файлы в C инициализированные данные для включения в ваш DLL или SO файл.
Это хорошее кросс-платформенное решение, но наказание заключается в том, что кривая обучения для начала довольно высока. Они не позволяют легко понять, как работает материал, или взять одну часть своего набора инструментов и разделить его на использование независимо от других частей. Но хорошей новостью является то, что если вы хотите использовать свою U/Win систему для запуска Unix-кодов в Windows (все части одного набора инструментов), вы можете создавать библиотеки DLL и SO с помощью одной и той же системы.
-
Для этой проблемы я часто возвращаюсь к Lua; Я могу хранить данные Lua во внешних файлах или внутри C как инициализированные данные. Это отлично подходит для распространения всего в одном файле .so; Я делаю это для своих учеников.
Опять же, недостатком является то, что вам нужно освоить и включить новую технологию.
В своей работе я использую Lua над материалами AT & T по следующим причинам:
-
Lua имеет гораздо меньший размер и призван хорошо играть с другими; с АСТ вы действительно действительно принимаете свой способ делать вещи.
-
Кривая обучения с Lua намного менее крутая; вы можете быть продуктивным очень быстро.
-
Lua легко устанавливается и легко получить информацию об этом. У AST есть свой собственный причудливый процесс установки, которого никто не видит в мире; часто бывает сложно сделать установку; и сложнее получить информацию об этом.
-
Использование Lua имеет много других выигрышей, поэтому усилия, потраченные на обучение Lua и изучение того, как включить Lua в коды C, легко амортизировать по нескольким проектам.