Fink

Ч.З.В. - 6. Проблемы компиляции - Общие вопросы

В6.1: Скрипт конфигурации жалуется, что не может найти "acceptable cc". Что это значит?

О: В следующий раз прочтите документы. При компилировании пакетов на основе исходного кода надо инсталлировать Developer Tools, которые в числе прочего содержат компилятор C - cc.

В6.2: При попытке выполнения "fink selfupdate-cvs" получаю сообщение: "cvs: Command not found."

О: Вам надо инсталлировать Developer Tools.

В6.3: Получил сообщение об ошибке, которое упоминает make

О: Если сообщение в такой форме:

make: command not found

или

Can't exec "make": 
No such file or directory at /opt/sw/lib/perl5/Fink/Services.pm line 190.

это значит, что вам надо инсталлировать Developer Tools.

С другой стороны, если сообщение об ошибке выглядит таким образом:

make: illegal option -- C

значит, вы заменили версию GNU утилита make, инсталлированного в качестве части Developer Tools, версией make BSD. Многие пакеты основываются на специальных параметрах, поддерживаемых только GNU make. Надо убедиться, что /usr/bin/make является алиасом gnumake, а не bsdmake. Кроме того, убедитесь, что /usr/local/bin/ не содержит другую копию make.

В6.4: Я получаю странное сообщение от команды head об использовании. Что не в порядке?

О: Если вы видите следующее:

Unknown option: 1 Usage: head [-options] <url>...

и затем следует список описаний опций, значит, у вас не в порядке выполняемый файл head. Это происходит, когда вы инсталлируете библиотеку Perl libwww в томе системы HFS+. Она пытается создать новую команду /usr/bin/HEAD, которая переписывает существующую команду head , т.к. файловая система не учитывает регистр клавиатуры. head является стандартной командой, используемой во многих скриптах оболочки и Makefiles. Вам надо опять раздобыть оригинальный выполняемый файл head, если вы хотите использовать Fink.

Скрипт самозагрузки версии исходного кода теперь это проверяет, но вы можете с этим столкнуться, если используете бинарную версию для первоначальной инсталляции или инсталлируете libwww после инсталляции Fink.

О возникновении этой проблемы также сообщалось в связи с инсталляцией /opt/sw/bin/HEAD (но не через посредство каких-либо пакетов Fink). Это решается легче: надо переименовать /opt/sw/bin/HEAD.

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

О: Это иногда происходит с разделенными пакетами (т.e. пакетами с -dev, -shlibs и т.д.), когда файл переносится из одной раздельной части в другую (н-р из foo в foo-shlibs. Надо записать поверх файла файл из пакета, который вы пытаетесь инсталлировать (т.к. они номинально являются одним и тем же):

sudo dpkg -i --force-overwrite filename
                

где filename файл .deb, соответствующий пакету, который вы хотите инсталлировать.

В6.6: Что означает "execution of mv failed, exit code 1", когда я пробую построить пакет?

О: Если у вас инсталлировано приложение StuffIt Pro, возможно у вас активирован режим "Archive Via Real Name". Проверьте область окна преференции StuffIt в инструменте System Preferences и дезактивируйте "ArchiveViaRealName" в случае его действия. Оно повторно выполняет несколько важных системных запросов, которые вызывают ряд подобных странных временных ошибок.

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

mv /opt/sw/src/root-foo-0.1.2-3/opt/sw/lib/libbar*.dylib \
/opt/sw/src/root-foo-shlibs-0.1.2-3/opt/sw/lib/ 
mv: cannot stat `/opt/sw/src/root-foo-0.1.2-3/opt/sw/lib/libbar*.dylib': 
No such file or directory 
### execution of mv failed, exit code 1 
Failed: installing foo-0.1.2-3 failed

надо искать libbar где-то в выводе вашей попытки компоновки.

В6.7: Не могу инсталлировать пакет | обновление, т.к. получил сообщение, что узел ("node") уже существует.

О: Эти ошибки иногда выглядят так:

Failed: Internal error: node for system-xfree86 already exists

Проблема заключается в том, что процессор взаимозависимости запутался из-за изменений в некоторых информационных файлах пакета. Для решения проблемы надо:

  • Насильно удалить пакет с ошибкой, т.е.

    sudo dpkg -r --force-all system-xfree86

    в случае приведенного примера.

  • Попытаться снова сделать инсталляцию | обновление. В какой-то момент появится опция "virtual dependency", содержащая пакет, который вы только что удалили. Надо его выделить и он будет вновь инсталлирован в процессе компоновки.

В6.8: Слышал, что библиотеки и заголовки, инсталлированные в /usr/local, иногда вызывают проблемы для Fink в построении. Правда ли это?

О: Это частый источник проблем, т.к. скрипт конфигурации пакета находит заголовки и библиотеки в /usr/local и решает использовать их, а не те, которые находятся на маршуте Fink. Если у вас проблемы с построением, которые не отражены в других Ч.З.В., надо проверить, есть ли у вас библиотеки в /usr/local/lib или заголовки в /usr/local/include. Если да, надо попытаться переименовать /usr/local во что-либо другое, н-р:

sudo mv /usr/local /usr/local.moved

сделать построение и затем поместить /usr/local обратно:

sudo mv /usr/local.moved /usr/local

Starting with macOS 10.14, it's sometimes not possible to rename /usr/local. If you get an error when renaming /usr/local directly, then rename the subdirectories inside it instead:

				sudo mv /usr/local/include /usr/local/include.moved
				sudo mv /usr/local/lib /usr/local/lib.moved
				

do your build, and then you can put /usr/local/include and /usr/local/lib back:

				sudo mv /usr/local/include.moved /usr/local/include
				sudo mv /usr/local/lib.moved /usr/local/lib
				

В6.9: Когда я пытаюсь построить пакет, получаю сообщение, что содержание ("table of contents") устарело. Что делать?

О: Ввод дает намек на то, что делать. Обычно сообщение выглядит так:

ld: table of contents for archive: 
/opt/sw/lib/libintl.a is out of date; 
rerun ranlib(1) (can't load from it)

Надо применить ranlib (в качестве суперпользователя) в любой библиотеке, где возникла проблема. В качестве примера, для вышеприведенного случая надо выполнить:

sudo ranlib /opt/sw/lib/libintl.a

В6.10: Fink Commander зависает, когда я пытаюсь инсталлировать atlas.

О: Это происходит потому, что одно из действий при построении atlas включает опцию, чтобы экран Fink Commander ничего не отображал. Вместо этого надо использовать fink install atlas.

В6.11: I get messages saying that I'm missing stddef.h | wchar.h | stdlib.h | crt1.o, or that my C compiler cannot create executables.

О: Both of these problems are typically due to the absence of essential headers that are provided by the DevSDK package of the Developer Tools. Check whether /Library/Receipts/DevSDK.pkg exists on your system. If not, then run the Dev Tools Installer again, and install the DevSDK package using a Custom Install.

The cannot create executables error can also occur when your Developer Tools version is for an earlier OS version.

В6.12: Не могу сделать обновление, т.к. Fink не может разрешить конфликт версий многих взаимозависимостей ("unable to resolve version conflict on multiple dependencies").

О: Попытайтесь обновить один пакет и затем использовать снова "fink update-all".Если опять получите сообщение, повторите процесс.

В6.13: Не могу ничего инсталлировать, т.к. получил сообщение "dpkg: parse error, in file `/opt/sw/var/lib/dpkg/status'"!

О: This means that somehow your dpkg database got damaged, usually from a crash or some other unrecoverable error. This most often occurs with a buildlock, e.g:

package `fink-buildlock-foo-1.2.3-4':  missing version

(of course, replace foo-1.2.3-4 with the package name you are seeing).

When this happens, you should edit /opt/sw/var/lib/dpkg/status as a superuser. Then go near the line number which shows up in the error message. You should see a fink-buildlock-foo-1.2.3-4 package whose Status field is marked

install ok installed

Change that to

purge ok not-installed

Under other circumstances, there may be garbage in the file. You can fix this situation by copying the previous version of the database, like so:

sudo cp /opt/sw/var/lib/dpkg/status-old /opt/sw/var/lib/dpkg/status

You may need to re-install the last couple of packages you installed before the problem started occurring.

В6.14: Получаю сообщения об ошибках с упоминанием freetype.

О: Есть несколько видов таких ошибок. If you get the following:

/usr/bin/ld: can't locate file for: -lfreetype

check whether you have an extraneous freetype-config excutable by running

where freetype-config

if you're using tcsh, or

type -a freetype-config

if you're using bash. The Mono Framework has been known to install a /usr/bin/freetype-config that is a symbolic link to a file in that framework.

Если сообщение выглядит так:

/opt/sw/include/pango-1.0/pango/pangoft2.h:52: 
error: parse error before '*' token 
/opt/sw/include/pango-1.0/pango/pangoft2.h:57:
error: parse error before '*' token
/opt/sw/include/pango-1.0/pango/pangoft2.h:61: 
error: parse error before '*' token 
/opt/sw/include/pango-1.0/pango/pangoft2.h:86: 
error: parse error before "pango_ft2_font_get_face"
/opt/sw/include/pango-1.0/pango/pangoft2.h:86: 
warning: data definition has no type or storage class 
make[2]: *** [rsvg-gz.lo] Error 1
make[1]: *** [all-recursive] Error 1 
make: *** [all-recursive-am] Error 2 
### execution of make failed, exit code 2 
Failed: compiling librsvg2-2.4.0-3 failed

или

In file included from vteft2.c:32: 
vteglyph.h:64: error:
parse error before "FT_Library" 
vteglyph.h:64: warning: 
no semicolon at end of struct or union vteft2.c: 
In function `_vte_ft2_get_text_width': 
vteft2.c:236: error: 
dereferencing pointer to incomplete type 
vteft2.c: In function `_vte_ft2_get_text_height':
vteft2.c:244: error: 
dereferencing pointer to incomplete type
vteft2.c: In function `_vte_ft2_get_text_ascent': 
vteft2.c:252: error:
dereferencing pointer to incomplete type 
vteft2.c: In function `_vte_ft2_draw_text': 
vteft2.c:294: error: 
dereferencing pointer to incomplete type 
vteft2.c:295: error: 
dereferencing pointer to incomplete type
make[2]: *** [vteft2.lo] Error 1 
make[1]: *** [all-recursive] Error 1 
make: *** [all] Error 2 
### execution of make failed, exit code 2
Failed: compiling vte-0.11.10-3 failed

или

checking for freetype-config.../usr/X11R6/bin/freetype-config 
checking For sufficiently new FreeType (at least 2.0.1)... no 
configure: error: pangoxft 
Pango backend found but did not find freetype libraries 
make: *** No targets specified and no makefile found. Stop. 
### execution of LD_TWOLEVEL_NAMESPACE=1 failed, exit code 2 
Failed: compiling gtk+2-2.2.4-2 failed
checking for freetype-config.../usr/X11R6/bin/freetype-config 
checking For sufficiently new FreeType (at least 2.0.1)... no 
configure: error: pangoxft 
Pango backend found but did not find freetype libraries 
make: *** No targets specified and no makefile found. Stop. 
### execution of LD_TWOLEVEL_NAMESPACE=1 failed, exit code 2 
Failed: compiling gtk+2-2.2.4-2 failed

значит, проблема возникла из-за путаницы между заголовками в пакете freetype | freetype-hinting и заголовками freetype2, сопровождающими X11 | XFree86.

fink remove freetype freetype-hinting

удалит любой вариант, который вы инсталлировали. С другой стороны, если ваша ошибка выглядит так:

ld: Undefined symbols: _FT_Access_Frame

это обычно по причине файла, оставшегося после предыдущей инсталляции X11. Инсталлируйте снова X11 SDK.

В6.15: Получил сообщение об ошибке построения с упоминанием `Dl_info'.

О: Если сообщение выглядит так:

unix_dl.c: In function `rep_open_dl_library':
unix_dl.c:328: warning: assignment discards qualifiers from pointer target type 
unix_dl.c: In function `rep_find_c_symbol': 
unix_dl.c:466: error: `Dl_info' undeclared (first use in this function)
unix_dl.c:466: error: (Each undeclared identifier is reported only once 
unix_dl.c:466: error: for each function it appears in.)
unix_dl.c:466: error: parse error before "info" 
unix_dl.c:467: error: `info' undeclared (first use in this function) 
make[1]: *** [unix_dl.lo] Error 1

то скорее всего ваш файл заголовка /usr/local/include/dlfcn.h несовместим с Panther. Надо его убрать.

Обычно его инсталлирует Open Office и вам надо заменить этот файл заголовка, а также библиотеку /usr/local/lib/libdl.dylib на символические указатели (алиасы) встроенных файлов Panther

sudo ln -s /usr/include/dlfcn.h /usr/local/include/dlfcn.h
sudo ln -s /usr/lib/libdl.dylib /usr/local/lib/libdl.dylib

В6.16: Fink утверждает, что мне не хватает gcc2 или gcc3.1, но их инсталляция не представляется возможной.

О: Это потому, что gcc2 и gcc3.1 являются виртуальными пакетами для отражения наличия gcc-2.95 и gcc-3.1, соответственно, в вашей системе. Инсталлируйте пакет gcc2.95 и/или gcc3.1 из XCode Tools (в более ранних версиях OS есть gcc-2.95 и gcc-3.1 как часть основной инсталляции Developer Tools).

В6.17: Fink утверждает: Failed: Can't resolve dependency "system-java14-dev", но такого пакета нет.

О: Это виртуальный пакет. Ошибка данного типа имеет место, когда Java обновляется при помощи Software Update: файлы заголовков удаляются и это приводит к тому, что пакет -dev не воспроизводится.

Надо скачать соответствующий пакет Java Developer Tools из Apple. В данном отдельном случае это Java 1.4.2 Developer Tools.

В6.18: При попытке инсталляции ч.-л. получаю сообщение: dpkg (subprocess): failed to exec dpkg-split to see if it's part of a multiparter: No such file or directory. Как это исправить?

О: Вообще это исправляется при помощи правильной настройки среды, см. этот Ч.З.В..

В6.19: Получил такое сообщение: configure: error: XML::Parser perl module is required for intltool. Что делать?

О: Надо убедиться, что у вас правильный вариант пакета xml-parser-pm для соответствия версии Perl в вашей системе. Н-р, в Panther надо иметь xml-parser-pm581, а не xml-parser-pm560 (у вас также может быть заполнитель xml-parser-pm), т.к. у вас Perl-5.8.1, а не Perl-5.6.0. Если вы в Jaguar и используете по умолчанию системную версию Perl, у вас будет вариант pm560, а если вы инсталлировали Perl 5.8.0, у вас может быть вариант pm580.

В6.20: Пытаюсь скачать пакет, а Fink выходит на какой-то загадочный сайт с distfiles в названии, а файла там нет.

О: Дело в том, что Fink пытается использовать одно из т.н. зеркал Master. Они созданы для обеспечения доступности исходных кодов для пакетов Fink даже тогда, когда апстрим-сайт их убирает. Как правило, такие ошибки случаются, когда новая апстрим-версия пакета выпущена, но еще не попала в зеркала Master.

Для исправления примените fink configure и установите порядок поиска для использования зеркал Master в последнюю очередь.

В6.21: Хочу, чтобы Fink использовал разные опции при построении пакета.

О: Прежде всего надо направить координатору пакета запрос о варианте. Это может быть относительно легко. Если вы не получите ответа от координатора, если увидите новые пакеты или захотите попробовать сами другую опцию, см. Пособие по пакетированию и Учебник по пакетированию.

Прим.: Fink сознательно создан таким образом, чтобы все официальные бинарные файлы были идентичными, независимо от того, на какой машине они созданы, и таким образом явления типа оптимизации G5 не произойдут с официальным пакетом. Если вам это нужно, придется сделать это самостоятельно.

В6.22: Whenever I try to build from source, Fink keeps waffling between alternate versions of the same library.

О: Often, in a complicated build tree, you may find that some of the packages depend on a particular version of a library, and other depend on a different one (e.g. db47 vs. db44). Consequently, Fink may try to switch to whichever one isn't currently installed in order to satisfy the build dependency for the current package that you're trying to update.

Unfortunately, due to limitations in the build-dependency engine, you may wind up with the dreaded

Fink::SysState: Could not resolve inconsistent dependencies

message when trying a sufficiently complicated update-all. This generally gives you a command to try to resolve the issue:

fink scanpackages
sudo apt-get update
sudo apt-get install foo=1.23-4	
      

but this may not work for sufficiently complicated updates. You might need to update packages one-by-one, at least for a while.

В6.23: I get errors involving MACOSX_DEPLOYMENT_TARGET when I try to build a Python module.

О: For errors that look like the following:

running build
running build_ext
Traceback (most recent call last):
  File "setup_socket_ssl.py", line 21, in ?
    depends = ['socketmodule.h'] )
  File "/opt/sw/src/root-python24-2.4.1-1/opt/sw/lib/python2.4/distutils/core.py", line 166, in setup
SystemExit: error: $MACOSX_DEPLOYMENT_TARGET mismatch: now "10.4" but "10.3" during configure
### execution of /opt/sw/bin/python2.4 failed, exit code 1

the problem occurs because the python2* packages write the current MACOSX_DEPLOYMENT_TARGET to a configuration file when they're built and the python build utilities use this value when compiling modules. This means that if you have, for example, a python24 package on 10.4 that was built on 10.3, either by upgrading 10.3 => 10.4, or via the 10.4-transitional binary distribution, in which python24 wasn't rebuilt, there will be a mismatch between what python thinks MACOSX_DEPLOYMENT_TARGET should be (10.3) and what it actually is (10.4).

The fix is to rebuild the offending python package, e.g. fink rebuild python24 for the case above.

For runtime errors that give the same type of error message as above, rebuild the module after rebuilding the appropriate python2* package.

В6.24: I get unrecognized option `-dynamic' errors from libtool.

О: This error:

 libtool: unrecognized option `-dynamic'

typically means that you've replaced Apple's /usr/bin/libtool with a GNU libtool. Unfortunately, the two libtools do not do the same thing.

The only way to solve this is to get a working Apple libtool from somewhere. It is installed as part of the DeveloperTools.pkg package of the XCode Tools, and you can reinstall that whole package if you first clear out its receipt in /Library/Receipts (drag it to the Trash for OS 10.4 and later, or use sudo rm -rf /Library/Receipts/DeveloperTools.pkg for 10.3).

Следующий: 7. Проблемы компиляции - специальные пакеты