Портативные общие объекты?

Решил это. Мне нужно было передать слаг к выбранному атрибуту, а не к имени. Если вы реализуете это, вы, вероятно, используете id вместо slug. В любом случае, это то, что сработало для меня.

<%= f.input :folder, 
  collection: current_user.folders, 
  label_method: :name, 
  value_method: :slug,
  selected: @folder.slug
%>
5
задан anatoly techtonik 13 January 2014 в 14:06
поделиться

7 ответов

Я очень очень рекомендую использовать LSB app / library checker. Он расскажет вам быстро, если вы:

  • используете расширения, которые недоступны в некоторых дистрибутивах
  • Ввести bash-isms в скриптах установки
  • Использовать системные вызовы, которые недоступны во всех последних ядрах
  • Зависит от нестандартных библиотек (они расскажут вам, в каких дистрибутивах их нет)
  • И во многих других очень хороших проверках

Вы можете получить дополнительную информацию здесь , а также загрузить инструмент. Его легко запустить ... просто распакуйте его, запустите скрипт на Perl и укажите свой браузер на localhost ... остальное - браузер.

Используя этот инструмент, вы можете легко получить сертификацию LSB для вашей библиотеки / приложения (для обеих версий) и сделать работу дистрибутора гораздо проще.

Кроме того, просто используйте что-то вроде libtool (или подобного), чтобы убедиться, что ваша библиотека установлена ​​правильно, предоставьте статический объект для людей, которые не хотят связываться с DSO (потребуется время, чтобы ваша библиотека появилась в большинстве дистрибутивов, поэтому написание портативная программа, я не могу рассчитывать на ее присутствие) и хорошо прокомментирую ваш публичный интерфейс.

Для библиотек я считаю, что Doxygen работает лучше всего. Документация очень важна, она, безусловно, влияет на мой выбор библиотеки для использования в любой заданной задаче.

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

Наконец, постарайтесь сделать так, чтобы ваша библиотека легко помещалась «в дереве», чтобы мне не приходилось статически ссылаться на нее. Как я сказал, может пройти несколько лет, прежде чем он станет распространенным в большинстве дистрибутивов. Мне гораздо проще просто взять ваш код, поместить его в src / lib и использовать его до тех пор, пока ваша библиотека не станет общей. И, пожалуйста, пожалуйста ... дайте мне модульные тесты, TAP (протокол что угодно) - хороший и портативный способ сделать это. Если я взломаю вашу библиотеку, мне нужно будет (быстро) узнать, не сломал ли я ее, особенно при ее изменении в дереве или en situ (если DSO существует).

10
ответ дан 18 December 2019 в 07:10
поделиться

Я знаю, что вы спрашиваете. Для Windows MSFT тщательно сделал все библиотеки DLL совместимыми, поэтому ваши библиотеки DLL обычно совместимы практически с любой версией Windows, поэтому вы называете это «переносной».

К сожалению, в Linux слишком много вариантов (и все мы думаем быть «разными», чтобы зарабатывать деньги), чтобы вы не могли получить те же преимущества, что и Windows, и поэтому у нас есть множество одинаковых пакетов, скомпилированных для разных дистрибутивов, версии дистрибутива, типа процессора, ...

Некоторые говорят, что проблема вызвано архитектурой (CPU), но это не так. Даже на одной и той же арке между дистрибутивами есть различия. Как только вы действительно попытаетесь выпустить бинарный пакет, вы поймете, насколько это сложно - даже зависимость от библиотеки времени выполнения C трудно поддерживать. В ОС Linux слишком много всего, поэтому почти все службы связаны с проблемой зависимости.

Обычно вы можете создать только какой-нибудь двоичный файл, совместимый с каким-либо дистрибутивом (или несколькими дистрибутивами, если вам повезет). Вот почему выпуск программ для Linux в двоичном коде всегда затруднен, если только он не связан с каким-либо дистрибутивом, таким как Ubuntu, Debian или RH.

2
ответ дан 18 December 2019 в 07:10
поделиться

В идеале вы захотите использовать GNU autoconf , automake и libtool для создания конфигурации и создания сценариев, затем распространите библиотеку как источник с созданными файлами configure и Makefile.in.

Вот электронная книга о них .

./ configure; делать; make install является довольно стандартным в Linux.

Корень проблемы в том, что Linux работает на многих разных процессорах. Вы не можете просто полагаться на процессор, поддерживающий инструкции x86, как в Windows (для большинства версий: Itanium (XP и новее) и Alpha (NT 4.0) являются исключениями).

4
ответ дан 18 December 2019 в 07:10
поделиться

Итак, вопрос в том, как разработать разделяемые библиотеки для Linux? Вы можете взглянуть на это руководство или Howto Library Pogram Library .

2
ответ дан 18 December 2019 в 07:10
поделиться

Если вы хотите помочь своим пользователям, предоставив им скомпилированный код, лучший из известных мне способов - предоставить им статически связанный двоичный файл + документацию о том, как они могут запускать двоичный файл. (Это возможно в дополнение к предоставлению им исходного кода. ) Большинство статически связанных двоичных файлов работают на большинстве дистрибутивов Linux с той же архитектурой (+ 32-разрядные (x86) статически связанные двоичные файлы работают на 64-разрядных (amd64)). Неудивительно, что Skype предоставляет статически связанную загрузку Linux.

Вернуться к вопросу о вашей библиотеке. Даже если вы являетесь экспертом в написании разделяемых библиотек в Linux и не торопитесь минимизировать зависимости, чтобы ваша разделяемая библиотека работала в разных дистрибутивах Linux, включая старые и новые версии, невозможно гарантировать, что она будет работать в будущем (скажем, 2 года). Скорее всего, вы в конечном итоге будете поддерживать файл .so, то есть снова и снова вносить небольшие изменения, чтобы файл .so стал совместимым с более новыми версиями дистрибутивов Linux. Это долго не доставляет удовольствия, и это существенно снижает вашу производительность: время, которое вы тратите на поддержание совместимости библиотеки, было бы гораздо лучше потрачено, например, на улучшение функциональности, эффективности, безопасности и т. д. программного обеспечения.

Также обратите внимание, что очень легко расстроить ваших пользователей, предоставив библиотеку в .so форма, которая не работает в их системе. (И у вас нет сверхдержавы, чтобы заставить его работать на во всех системах Linux, поэтому такая ситуация неизбежна.) Вы также предоставляете 32-битные и 64-битные системы, включая x86, PowerPC, ARM и т.д.? Если файл .so работает только в Debian, Ubuntu и Red Hat (поскольку у вас нет времени перенести файл в другие дистрибутивы), вы, скорее всего, расстроите своих пользователей SUSE и Gentoo (и более).

безопасность и т. д. программного обеспечения.

Также обратите внимание, что очень легко расстроить ваших пользователей, предоставив библиотеку в форме .so, которая не работает в их системе. (И у вас нет сверхдержавы, чтобы заставить его работать на во всех системах Linux, поэтому такая ситуация неизбежна.) Вы также предоставляете 32-битные и 64-битные системы, включая x86, PowerPC, ARM и т.д.? Если файл .so работает только в Debian, Ubuntu и Red Hat (поскольку у вас нет времени перенести файл в другие дистрибутивы), вы, скорее всего, расстроите своих пользователей SUSE и Gentoo (и более).

безопасность и т. д. программного обеспечения.

Также обратите внимание, что очень легко расстроить ваших пользователей, предоставив библиотеку в форме .so, которая не работает в их системе. (И у вас нет сверхдержавы, чтобы заставить его работать на во всех системах Linux, поэтому такая ситуация неизбежна.) Вы также предоставляете 32-битные и 64-битные системы, включая x86, PowerPC, ARM и т.д.? Если файл .so работает только в Debian, Ubuntu и Red Hat (поскольку у вас нет времени перенести файл в другие дистрибутивы), вы, скорее всего, расстроите своих пользователей SUSE и Gentoo (и более).

так что эта ситуация неизбежна.) Вы также предоставляете 32-битные и 64-битные версии, включая x86, PowerPC, ARM и т. д.? Если файл .so работает только в Debian, Ubuntu и Red Hat (поскольку у вас нет времени перенести файл в другие дистрибутивы), вы, скорее всего, расстроите своих пользователей SUSE и Gentoo (и более).

так что эта ситуация неизбежна.) Вы также предоставляете 32-битные и 64-битные версии, включая x86, PowerPC, ARM и т. д.? Если файл .so работает только в Debian, Ubuntu и Red Hat (поскольку у вас нет времени перенести файл в другие дистрибутивы), вы, скорее всего, расстроите своих пользователей SUSE и Gentoo (и более).

4
ответ дан 18 December 2019 в 07:10
поделиться

Простое помещение файла .so в / usr / lib может работать, но вы, вероятно, испортите схему, используемую вашим дистрибутивом для управления библиотеками.

Взгляните на стандартную базу Linux - это самая близкая вещь, которую вы найдете к общей платформе среди дистрибутивов Linux.

http://www.linuxfoundation.org/collaborate/workgroups/lsb

Что вы пытаетесь выполнить?

0
ответ дан 18 December 2019 в 07:10
поделиться

Ответ Тинкертима точен. Добавлю, что важно понимать и планировать изменения в ABI gcc . В последнее время все было довольно стабильно, и я думаю, что все основные дистрибутивы находятся на gcc 4.3.2 или около того. Тем не менее, каждые несколько лет некоторые изменения в ABI (особенно биты, связанные с C ++), кажется, приводят к хаосу, по крайней мере, для тех, кто хочет выпустить кросс-дистрибутивы, и для пользователей, которые привыкли собирать пакеты из других дистрибутивов, отличных от их запуска, и находить, что они работают. Пока идет один из этих переходов (все дистрибутивы обновляются в своем собственном темпе), в идеале вы хотите выпустить библиотеки с ABI, поддерживающими полный спектр версий gcc, используемых вашими пользователями.

0
ответ дан 18 December 2019 в 07:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: