Разработчик программного обеспечения, переключающийся от Linux до OS X, каковы глюки?

rsync -av --include="*/" --include="*.pdf" --exclude="*" ~/Latex/ ~/Output/ --dry-run

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

Если Вы начинаетесь с:

--exclude '*' --include '*.pdf'

Затем жадное соответствие исключит все сразу же.

Если Вы пробуете:

--include '*.pdf' --exclude '*' 

Затем только файлы PDF в высокоуровневой папке будут переданы. Это не будет следовать никаким каталогам, так как они исключены '*'.

50
20.08.2010, 07:26
7 ответов

Я сделал то же перемещение несколько лет назад. Вот вещи, с которыми я столкнулся:

  • Ваш средний настольный Linux имеет более богатое пространство пользователя, чем тот из OS X.

    Вы, вероятно, пропустите различные инструменты, чем я сделал, таким образом, никакой смысл, определяющийся с рекомендациями для замен.

    Вместо этого просто установите Штрейкбрехера, MacPorts, или Домашнее пиво первая вещь. Эти системы обеспечивают систему управления пакета, типичную для Linux или BSDs. У каждого есть его собственная разновидность и набор пакета, таким образом, правильный выбор будет основан на Ваших вкусах и потребностях.

    Можно найти, что никакая система пакета не будет иметь каждую программу, в которой Вы нуждаетесь. Некоторые программы должны все же быть портированы к OS X, таким образом, они не появятся ни в какой системе пакета. Тем не менее, эти системы действительно значительно расширяют, какие поставки с OS X, и упростит Ваш переход от Linux.

  • Компиляторы командной строки OS X теперь создают 64-разрядные исполняемые файлы по умолчанию.

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

    Один способ вызвать 32-разрядную сборку состоит в том, чтобы переопределить gcc значения по умолчанию в системах сборки с gcc-4.0, причем тот старый 32-bits-by-default компилятор Leopard. (gcc символьная ссылка на 64-bits-by-default gcc-4.2 на Snow Leopard.) С базирующимися системами сборки autoconf это работает:

    $ ./configure CC=gcc-4.0 CXX=g++-4.0
    

    (Вам только нужно CXX бит, если программа содержит компоненты C++.)

    Иначе должен передать -m32 к компилятору и компоновщику:

    $ ./configure CFLAGS=-m32 CXXFLAGS=-m32 LDFLAGS=-m32
    

    Это больше вводит, но это позволяет Вам вытащить 32-разрядные сборки из более нового GCC.

  • Динамическая связь весьма отличается.

    Если Вы - вид для записи Вашего ld команды вручную, пора повредить ту привычку. Необходимо вместо этого связывать программы и библиотеки через компилятор, или использовать посредника как libtool. Они заботятся о niggly определенных для платформы различиях в схеме ссылки, таким образом, можно сохранить интеллектуальную мощь для изучения программ, Вы не можете абстрагировать далеко с портативными механизмами.

    Например, необходимо будет обновить память мышц, таким образом, Вы введете otool -L someprogram вместо ldd someprogram выяснять что библиотеки someprogram связан с.

    Другое различие в динамической связи, которая скрутит Ваш мозг сначала, - то, что на OS X, местоположение установки для библиотеки зарегистрировано в самой библиотеке и копиях компоновщика это в исполняемый файл во время ссылки. Это означает что, если Вы связываетесь с библиотекой, которая была установлена в /usr/local/lib но Вы хотите поставить его своим пользователям в том же каталоге как исполняемый файл, необходимо сказать что-то вроде этого как часть процесса установки:

    $ cp /usr/local/lib/libfoo.dylib .
    $ install_name_tool -id @loader_path/libfoo.dylib libfoo.dylib
    $ make LDFLAGS=-L. relink
    

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

    install_name_tool базовая команда здесь. Если вместо этого Вы хотели установить библиотеку в a ../lib каталог относительно исполняемого файла, -id аргумент должен был бы быть @loader_path/../lib/libfoo.dylib вместо этого.

    Joe Di Pol написал хорошую статью об этом с намного большим количеством детали.

  • Динамическая связь + сторонние пакеты может вызвать головные боли вначале.

    Вы, вероятно, столкнетесь с динамическими проблемами связи вначале, как только Вы начинаете пытаться пользоваться библиотеками от сторонних пакетов, которые не устанавливают библиотеки в стандартные местоположения. MacPorts делает это, например, устанавливая библиотеки в /opt/local/lib, вместо /usr/lib или /usr/local/lib. При столкновении с этим хорошая фиксация для проблемы должна добавить строки как следующее к Вашему .bash_profile:

    # Tell the dynamic linker (dyld) where to find MacPorts package libs
    export DYLD_LIBRARY_PATH=/opt/local/lib:$DYLD_LIBRARY_PATH
    
    # Add MacPorts header file install dirs to your gcc and g++ include paths
    export C_INCLUDE_PATH=/opt/local/include:$C_INCLUDE_PATH
    export CPLUS_INCLUDE_PATH=/opt/local/include:$CPLUS_INCLUDE_PATH
    
  • OS X обрабатывает проблему совместимости ЦП по-другому, чем Linux.

    На 64-разрядном Linux, где необходимо также поддерживать 32-разрядный по любой причине, Вы заканчиваете с двумя копиями вещей как библиотеки, которые должны быть в обоих форматах с 64-разрядными версиями прочь в a lib64 каталог, параллельный традиционному lib каталог.

    OS X решает эту проблему по-другому с Универсальным двоичным понятием, которое позволяет Вам поместить несколько двоичных файлов в единственный файл. У Вас могут в настоящее время быть исполняемые файлы, которые поддерживают до 4 типов ЦП: 32-и 64-разрядный PowerPC, плюс 32-и 64-разрядный Intel.

    Легко создать Универсальные двоичные файлы с XCode, но что-то вроде боли с инструментами командной строки. Это получает Вас Универсальная сборка только для Intel с находящимися в Autoconf системами сборки:

    $ ./configure --disable-dependency-tracking CFLAGS='-arch i386 -arch x86_64' \
      LDFLAGS='-arch i386 -arch x86_64'
    

    Добавить -arch ppc -arch ppc64 к CFLAGS и LDFLAGS если Вам нужна поддержка PowerPC.

    Если Вы не отключаете отслеживание зависимости, Вы заканчиваете тем, что создали только для одной платформы, начиная с присутствия недавно созданных .o файлы для первой платформы убеждают make(1) то, что это не должно создавать для второй платформы, также. Все должно быть создано дважды в вышеупомянутом примере; четыре раза для полностью Универсального двоичного файла, если Вам все еще нужна поддержка PowerPC.

    (Больше информации в Техническом примечании Apple TN2137.)

  • Инструменты разработчика не установлены на OS X по умолчанию.

    Передо Львом самое надежное место для получения права dev инструменты для системы было на дисках ОС. Они - дополнительная установка.

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

    Со Львом они пытаются покончить с медиа установки, поэтому если Вы не покупаете дорогую версию флеш-карты, необходимо будет загрузить XCode с App Store.

    Я рекомендую сохранить по крайней мере несколько версий любого DMGs XCode, который Вы загружаете. Когда преемник Льва выходит год или три следовательно, Вы могли бы оказаться без способа установить одновременную версию XCode на тестовом VM Льва. Запланируйте заранее в случае, если проблемы доступности и отсутствие медиа ОС делают старые версии XCode в других отношениях недоступными.

52
27.01.2020, 19:33
  • 1
    +1: специально для упоминания динамической связи. Я ловился, думая, что это будет очень похоже. Радость install_name и как редактор динамического канала OSX, dyld, твердость depdendencies! –  Troubadour 19.08.2010, 17:53
  • 2
    О хранении старых версий MacOS: Я использую Параллель для хранения разделенного VMs с данной версией OS X, если я хочу протестировать обратную совместимость. Я рекомендую это или подобный инструмент для тестирования приложения. –  ogerard 30.04.2011, 16:59
  • 3
    Для старых версий инструментов разработчика проверьте connect.apple.com. Я просто проверил, и первая загрузка, перечисленная в разделе Developer Tools, является Xcode 1.0 с 27 октября 2004 для OS X 10.3 +. Никакой ProjectBuilder, но SOP для проектов Mac не должен поддерживать только текущие и предыдущие главные версии, таким образом, 10.3 + более чем достаточно. –  Jeremy W. Sherman 08.06.2011, 20:05
  • 4
    @Jeremy: Обновленный. Я не хочу уверять людей, что они всегда будут загружаемы, так как они не всегда были в прошлом. –  Warren Young 08.06.2011, 22:45

ОГРОМНЫЙ ГЛЮК - файловая система Mac OS не чувствительна к регистру.

29
27.01.2020, 19:33
  • 1
    Только, чтобы быть ясными, они - сохранение случая и не чувствительные к регистру по умолчанию. Таким образом, случай Вашего имени файла будет сохранен, но можно получить доступ к нему посредством любого изменения случая. Это может быть изменено, чтобы быть чувствительным к регистру, когда файловая система создается. –  KeithB 18.08.2010, 23:38
  • 2
    @KeithB: Однако много основных приложений для Mac не будут работать на чувствительной к регистру файловой системе, например, Adobe CS отказывается даже устанавливать, и World of Warcraft не будет работать. Я был записан этим, и единственный способ восстановиться состоял в том, чтобы создать резервную копию и восстановить мою систему на переформатированный диск. –  Neil Mayhew 11.09.2010, 00:42
  • 3
    Это - главным образом глюк при контакте с управлением версиями и работе над проектом в многоплатформенной команде. –  Arafangion 05.10.2010, 17:23
  • 4
    я создал чувствительный к регистру sparsebundle к обходному решению это. К счастью у меня есть неиспользованный раздел на этом SSD. –  dhchdhd 24.04.2012, 06:33

Хотя Fink и MacPorts являются традиционными средствами получения пакетов Unix на OS X, я рекомендовал бы проверить более новый названный инструмент brew это работало лучше на меня и смешало меньше с моей системой и намного легче использовать. Это в основном просто загружает tarballs и устанавливает на/usr/local, но это автоматизирует целый процесс очень приятно.

http://mxcl.github.com/homebrew/

9
27.01.2020, 19:33
  • 1
    Согласованный; Домашнее пиво работало намного более гладкое на меня, чем MacPorts. –  Jonik 09.07.2013, 11:24

ОГРОМНЫЙ ГЛЮК - файловая система Mac OS не чувствительна к регистру.

Можно создать чувствительный к регистру образ диска на Mac OS X, который может быть смонтирован как нормальный том жесткого диска.

# cf. http://codesnippets.joyent.com/posts/show/8617
IMAGE="${HOME}/Desktop/Case Sensitive Test.dmg"
VOLNAME="Case Sensitive Test"

hdiutil create "${IMAGE}" -size 10m -fs HFSX -volname "${VOLNAME}" -layout NONE

hdiutil attach "${IMAGE}"

cd "/Volumes/${VOLNAME}"
touch foo.txt Foo.txt
open .
ls -l [Ff]oo.txt
stat -f "inode: %i  --  name: %N" [Ff]oo.txt

cd ~
hdiutil detach "/Volumes/${VOLNAME}"
4
27.01.2020, 19:33

Вот хороший источник выбранных dev статей, Литературного Списка Какао:

http://osx.hyperjeff.net/Reference/CocoaArticles

(Это может быть особенно полезно, если однажды Вы хотите использовать Mac OS X определенные положительные герои.)

3
27.01.2020, 19:33

При портировании сетевого стека из Соляриса, BSD, Linux и Windows к OSX единственный основной момент, который привлекает внимание, - то, что во многом как FreeBSD весь набор инструментальных средств довольно стар.

Apple ускоряется с со Львом OSX, но Leopard, Snow Leopard симпатичен позади современных дистрибутивов Linux, и много стандартов не поддерживаются. В моем случае я поражен отсутствием RFC 3678 (Расширения Интерфейса сокета для Фильтров источников многоадресной передачи) быть довольно неудобным.

На сервере OSX я установил чувствительную к регистру файловую систему, поскольку он рекомендует сделать так для обслуживания HTTP.

  • Старый GCC
  • Старый Autoconf, Автосделайте, libtool
  • Никакие спин-блокировки Pthread, OSX обеспечивает собственные альтернативы.
  • Не много re-rentrant NSS API.
  • Не чрезмерно полезный /proc файловая система.
  • Нет /dev/rtc, /dev/hpet, и RDTSC кажется, gimped. OSX обеспечивает собственные альтернативы.
  • Нет epoll, но Вы имеете poll и kqueue
3
27.01.2020, 19:33

OS X поддерживает pthread_cond_timedwait , но использует абсолютное календарное время, и нет возможности использовать монотонно время увеличения.

1
27.01.2020, 19:33

Теги

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