Ч.З.В. - 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. Проблемы компиляции - специальные пакеты