Подтвердить что ты не робот

Проблемы с компиляцией apache2 в Mac OS X Mountain Lion

При попытке скомпилировать последнюю версию веб-сервера apache (2.4.3) на моем Mac (10.8) я столкнулся с проблемой. Когда я запускаю команду. /configure, я получил следующий вывод:

checking for chosen layout... Apache
checking for working mkdir -p... yes
checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E
checking build system type... x86_64-apple-darwin12.0.0
checking host system type... x86_64-apple-darwin12.0.0
checking target system type... x86_64-apple-darwin12.0.0
configure: 
configure: Configuring Apache Portable Runtime library...
configure: 
checking for APR... yes
  setting CC to "/Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.8.xctoolchain/usr/bin/cc"
  setting CPP to "/Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.8.xctoolchain/usr/bin/cc -E"
  setting CFLAGS to " "
  setting CPPFLAGS to " -DDARWIN -DSIGPROCMASK_SETS_THREAD_MASK"
  setting LDFLAGS to " "
configure: 
configure: Configuring Apache Portable Runtime Utility library...
configure: 
checking for APR-util... yes
checking for gcc... /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.8.xctoolchain/usr/bin/cc
checking whether the C compiler works... no
configure: error: in `/Users/cti/Downloads/Applications/httpd-2.4.3':
configure: error: C compiler cannot create executables
See `config.log' for more details

Вот последние несколько строк в файле журнала:

## ----------- ##
## Core tests. ##
## ----------- ##

configure:3056: checking for chosen layout
configure:3058: result: Apache
configure:3861: checking for working mkdir -p
configure:3877: result: yes
configure:3886: checking for grep that handles long lines and -e
configure:3944: result: /usr/bin/grep
configure:3949: checking for egrep
configure:4011: result: /usr/bin/grep -E
configure:4027: checking build system type
configure:4041: result: x86_64-apple-darwin12.0.0
configure:4061: checking host system type
configure:4074: result: x86_64-apple-darwin12.0.0
configure:4094: checking target system type
configure:4107: result: x86_64-apple-darwin12.0.0
configure:4137: 
configure:4139: Configuring Apache Portable Runtime library...
configure:4141: 
configure:4182: checking for APR
configure:4327: result: yes
configure:4587: 
configure:4589: Configuring Apache Portable Runtime Utility library...
configure:4591: 
configure:4628: checking for APR-util
configure:4707: result: yes
configure:4968: checking for gcc
configure:4995: result: /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.8.xctoolchain/usr/bin/cc
configure:5224: checking for C compiler version
configure:5233: /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.8.xctoolchain/usr/bin/cc --version >&5
./configure: line 5235: /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.8.xctoolchain/usr/bin/cc: No such file or directory
configure:5244: $? = 127
configure:5233: /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.8.xctoolchain/usr/bin/cc -v >&5
./configure: line 5235: /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.8.xctoolchain/usr/bin/cc: No such file or directory
configure:5244: $? = 127
configure:5233: /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.8.xctoolchain/usr/bin/cc -V >&5
./configure: line 5235: /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.8.xctoolchain/usr/bin/cc: No such file or directory
configure:5244: $? = 127
configure:5233: /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.8.xctoolchain/usr/bin/cc -qversion >&5
./configure: line 5235: /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.8.xctoolchain/usr/bin/cc: No such file or directory
configure:5244: $? = 127
configure:5264: checking whether the C compiler works
configure:5286: /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.8.xctoolchain/usr/bin/cc    -DDARWIN -DSIGPROCMASK_SETS_THREAD_MASK   conftest.c  >&5
./configure: line 5288: /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.8.xctoolchain/usr/bin/cc: No such file or directory
configure:5290: $? = 127
configure:5328: result: no
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME ""
| #define PACKAGE_TARNAME ""
| #define PACKAGE_VERSION ""
| #define PACKAGE_STRING ""
| #define PACKAGE_BUGREPORT ""
| #define PACKAGE_URL ""
| /* end confdefs.h.  */
| 
| int
| main ()
| {
| 
|   ;
|   return 0;
| }
configure:5333: error: in `/Users/cti/Downloads/Applications/httpd-2.4.3':
configure:5335: error: C compiler cannot create executables
See `config.log' for more details

Как вы можете видеть в выводе журнала, script in./configure не смог найти путь к моему компилятору C, потому что он находится в /Applications/Xcode.app/Contents/Developer/usr/bin/cc, а не в /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.8.xctoolchain/usr/bin/cc, как указано в выходном файле журнала Вы можете сказать, что решение просто все, что мне нужно сделать, это изменить конфигурацию script, правильно? проблема в том, что я ничего не знаю о shell script, поэтому я борелся с ним последние 3 часа. Помоги пожалуйста. Спасибо заранее.

4b9b3361

Ответ 1

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

# Create a symlink to default Xcode toolchain for OS X lion
sudo ln -s \
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain \
/Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.8.xctoolchain

# Create a symlink to default Xcode toolchain for OS X maverick
sudo ln -s \
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain \
/Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.9.xctoolchain

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

Ответ 2

Для OSX 10.9 Mavericks Apache уже установлен, вы можете напрямую перейти на терминал и ввести следующие команды

Найти версию Apache

httpd -v

Чтобы начать:

sudo apachectl start 

Чтобы остановить:

sudo apachectl stop

Для перезапуска:

sudo apachectl restart

Ответ 3

Я на OSX Mavericks и пытался скомпилировать Apache 2.2.24 и столкнулся с этой ошибкой. Я видел из других ответов, что проблема связана с apxr и, таким образом, APR возвращает неправильное местоположение для gcc. Apple поставляет это, и в конфигурации Apache использовался поставляемый Apple.

По прихоти, я посмотрел и увидел, что configure script имеет возможность игнорировать предоставленные системой APR и использовать свои собственные.

Итак, я сделал это:

./configure --with-included-apr

И он прошел этап настройки и скомпилирован без ошибок.

Ответ 4

checking for gcc... /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.8.xctoolchain/usr/bin/cc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.8.xctoolchain/usr/bin/cc accepts -g... yes
checking for /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.8.xctoolchain/usr/bin/cc option to accept ISO C89... none needed
checking how to run the C preprocessor... /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.8.xctoolchain/usr/bin/cc -E
checking for /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.8.xctoolchain/usr/bin/cc option to accept ISO C99... none needed
checking for pcre-config... false

configure: error: pcre-config for libpcre not found. PCRE is required and available from http://pcre.org/

====

Я загрузил pcre-config, побежал: ./configure;make;make install

и теперь..... Tcharammmm! Httpd apache полностью установлен: D

Ответ 5

OSX Yosemite (10.10.5):

Принятый ответ сработал у меня:

$ cd /Applications/Xcode.app/Contents/Developer/Toolchains

$ ln -s XcodeDefault.xctoolchain/ OSX10.10.xctoolchain
                   ^                      ^
                   |                      |
             existing dir(or file)     link name

(Объяснение, почему это работает ниже.)

Тогда:

httpd-2.4.18$ ./configure  (php may require an additional option)

Если вы также собираетесь устанавливать php, вам может потребоваться добавить еще один вариант. /configure.

Основные инструкции установки php в Unix также содержат инструкции по установке apache:

./configure --enable-so
make
make install

Помощник по настройке Apache говорит следующее:

httpd-2.4.18$ ./configure --help 
...
...
--enable-so    DSO capability. This module will be automatically
               enabled unless you build all modules statically.

Это указывает на то, что параметр --enable-so может быть по умолчанию, но инструкции по установке apache даже не упоминают --enable-so. В документах apache 2.2 для configure я нашел это:

Modules, disabled by default
Some modules are compiled by default and have to be enabled explicitly...
...
...
--enable-so
...

В документах apache 2.4 для configure не упоминается --enable-so. Вместо этого они расскажут вам о выходе ./configure --help в разделе Optional features, который перечисляет --enable-so.

В результате, я думаю, вы должны настроить apache следующим образом:

 httpd-2.4.18$ ./configure --enable-so

========

УСТАНОВКА PHP

Чтобы заставить mysql работать с php, мне пришлось переустановить php и изменить следующую строку в php install docs:

php-7.0.2$ ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql

в

php-7.0.2$ ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-pdo-mysql

В первом случае вывод configure указывает, что параметр --with-mysql не существует - в противном случае php установлен нормально, а php файлы в apache htdocs directory выполнялись php.

Проблема в том, что php изменил поддержку mysql, а mysql_connect() устарел (и удален из php7), поэтому теперь вам нужно pdo-mysql adapter, как описано в php docs.

После переустановки php последние строки make install сказали следующее:

You may want to add: /usr/local/lib/php to your php.ini include_path

php.ini находится здесь: /usr/local/lib/php.ini, и я сделал это изменение:

include_path = ".:/php/includes:/usr/local/lib/php"

Затем я перезапустил apache, убедился, что mysql запущен, и я ввел в свой браузер следующий URL:

http://localhost:8080/mysql_test.php

и мой тестовый PDO script работал (находится в каталоге /usr/local/apache 2/htdocs):

<?php

$user = 'root';
$password = ’root_password_here’;
$host = 'localhost';
$dbname = 'my_db';


$pdo = new PDO(
    "mysql:host=$host; dbname=$dbname", 
    $user,
    $password
);

$statement = $pdo->query("SELECT 'Hello, dear MySQL user!' AS _message FROM DUAL");
$row = $statement->fetch(PDO::FETCH_ASSOC);
echo htmlentities($row['_message']);

?>

===========

После получения того же сообщения об ошибке, что и op, я проверил config.log в каталоге httpd-2.4.18, а строка там говорит:

./configure: line 5326: /Applications/Xcode.app/Contents/Developer/Toolchains/
OSX10.10.xctoolchain/usr/bin/cc: 
No such file or directory

Итак, configure script ищет:

  • Каталог с именем:

    /Applications/Xcode.app/Contents/Developer/ Toolchains/OSX10.10.xctoolchain/usr/bin/

  • Файл с именем cc в этом каталоге.

Хорошо, посмотрим, есть ли cc в этом каталоге:

~$ cd/Applications/Xcode.app/Contents/Developer/Toolchains/
OSX10.10.xctoolchain/usr/bin/

-bash: cd: /Applications/Xcode.app/Contents/Developer/Toolchains/
OSX10.10.xctoolchain/usr/bin/: No such file or directory

Это означает, что каталог не существует. Теперь вам нужно выяснить, какой каталог в этом длинном пути является тем, который не существует:

~$ cd /Applications/Xcode.app
/Applications/Xcode.app$ cd Contents/Developer
/Applications/Xcode.app/Contents/Developer$ cd Toolchains/OSX10.10.xctoolchain

-bash: cd: Toolchains/OSX10.10.xctoolchain/: No such file or directory

/Applications/Xcode.app/Contents/Developer$ cd Toolchains
/Applications/Xcode.app/Contents/Developer/Toolchains$ ls 

XcodeDefault.xctoolchain

Вы можете видеть, что нет каталога с именем OSX10.10.xctoolchain - существует только каталог с именем XcodeDefault.xctoolchain. В результате configure script не может найти каталог OSX10.10.xctoolchain в пути, который он использует, чтобы найти файл cc. Почему configure ищет этот каталог? Потому что либо разработчик, который написал script, напортачил, либо Apple прищурился.

Реальная цель configure заключается не в поиске каталога, а в поиске файла pesky cc. Оказывается, файл cc находится здесь:

/Applications/Xcode.app/Contents/Developer/Toolchains/
XcodeDefault.xctoolchain/usr/bin$ ls
...
cc
clang       
...
...

И для более любопытных:

/Applications/Xcode.app/Contents/Developer/
Toolchains/XcodeDefault.xctoolchain/usr/bin$ ls -al cc

lrwxr-xr-x  1 7stud  admin  5 Oct 29 15:22 cc -> clang

cc - это просто ссылка на компилятор Xcode clang.

Принятый ответ создает ссылку из имени OSX10.10.xctoolchain в каталог, который фактически содержит файл cc (хотя и несколько каталогов) XcodeDefault.xctoolchain:

Applications/
  Xcode.app/
    Contents/
      Developer/
        Toolchains/
          XcodeDefault.xctoolchain/
          OSX10.10.xctoolchain/ -> XcodeDefault.xctoolchain/
            usr/
              bin/
                 cc 

Другими словами, после создания ссылки два пути:

/Applications/Xcode.app/Contents/Developer/Toolchains/
XcodeDefault.xctoolchain/usr/bin

/Applications/Xcode.app/Contents/Developer/Toolchains/
OSX10.10.xctoolchain/usr/bin

будет эквивалентным. Имена XcodeDefault.xctoolchain и OSX10.10.xctoolchain будут алиасами для одного и того же каталога.

====

Я не понимаю @AlphaZygma answer. Он рекомендует добавить следующие два каталога в PATH (через/etc/paths):

/Applications/Xcode.app/Contents/Developer/usr/bin

/Applications/Xcode.app/Contents/Developer/Toolchains/
OSX10.8.xctoolchain/usr/bin
  • В моей системе первый каталог не содержит файла cc, поэтому нет причин для добавления этого каталога в мой PATH.

  • Второй каталог - это каталог, в котором configure указывает, что он не может найти. Добавление несуществующего каталога в ваш PATH по-прежнему означает, что он не существует.

  • В любом случае конфигурация script, похоже, не ищет каталоги PATH для cc, потому что в сообщении об ошибке указывается не существующий путь как проблема. Как поиск в каталогах PATH приведет к сообщению об ошибке с отсутствующим путем? Конфигурация script, похоже, направляет откуда-то еще сообщение о том, где искать cc.

  • Я не уверен, почему @AlphaZygma вставил новые пути между некоторыми из существующих путей в /etc/paths. Почему бы не добавить новые пути ниже существующих путей?

Я пробовал несколько разных версий этого ответа, но ничего не работало для меня.

====

Я просмотрел вывод ./configure --help:

Usage: ./configure [OPTION]... [VAR=VALUE]...

To assign environment variables (e.g., CC, CFLAGS...), specify them as
VAR=VALUE.  See below for descriptions of some of the useful variables.

...
...

Some influential environment variables:
  CC          C compiler command
  CFLAGS      C compiler flags
  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
              nonstandard directory <lib dir>
  LIBS        libraries to pass to the linker, e.g. -l<library>
  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
              you have headers in a nonstandard directory <include dir>
  CPP         C preprocessor

Здесь перечислены CC. Попробуйте:

$ ./configure CC=/Applications/Xcode.app/Contents/Developer/
Toolchains/XcodeDefault.xctoolchain/usr/bin/cc

...
...

checking for APR... yes
  setting CPP to "/Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.10.xctoolchain/usr/bin/cc -E"
  setting CFLAGS to " "
  setting CPPFLAGS to " -DDARWIN -DSIGPROCMASK_SETS_THREAD_MASK -DDARWIN_10"
  setting LDFLAGS to " "
configure: 
...
...
configure: error: C compiler cannot create executables

Глядя на вывод немного более тщательно, есть эта строка:

      setting CPP to "/Applications/Xcode.app/Contents/Developer/Toolchains/
OSX10.10.xctoolchain 

Конфигурация script все еще упоминает, что несуществующий путь связан с CPP. Еще раз посмотрите на результат ./configure --help:

Usage: ./configure [OPTION]... [VAR=VALUE]...

To assign environment variables (e.g., CC, CFLAGS...), specify them as
VAR=VALUE.  See below for descriptions of some of the useful variables.

...
...

Some influential environment variables:
  CC          C compiler command
  CFLAGS      C compiler flags
  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
              nonstandard directory <lib dir>
  LIBS        libraries to pass to the linker, e.g. -l<library>
  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
              you have headers in a nonstandard directory <include dir>
  CPP         C preprocessor

В последней строке перечисляется переменная CPP, которая упоминалась в строке ошибки. Попробуйте:

$ ./configure \
> CC=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc \
> CPP=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc 

...
...

checking how to run the C preprocessor... /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc
configure: error: in `/Users/7stud/Downloads/httpd-2.4.18':
configure: error: C preprocessor "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc" fails sanity check
See `config.log' for more details

Теперь все пути верны в сообщении об ошибке, но что-то "не позволяет проверить работоспособность". Я сдаюсь! Может быть, кто-то еще может забрать меня, где я остановился.

Хорошо, благодаря предложениям здесь, следующие работы:

$ ./configure \
> CC=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc \
> CPP='/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc -E'

и это можно сократить до:

$ ./configure \
> CC=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc \
> CPP='cc -E'

Но тогда make не удалось:

$ make
...
/usr/share/apr-1/build-1/libtool: line 8962: /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.10.xctoolchain/usr/bin/cc: No such file or directory

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

Ответ 6

В то же самое время возникла проблема с Mac OS X 10.9 (Mavericks); yes as user3097424 утверждает, что Apache предварительно установлен для пользователей Mavericks, хотя для меня версия 2.2. Поэтому, чтобы обновить до 2.4, сделайте так, как говорит Адриан Родригес, и создайте символическую ссылку, заменив "10.8" на "10.9":   

sudo ln -s /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.9.xctoolchain

Ответ 7

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

Итак, в вашем случае это может выглядеть как

[[email protected] ~]$ sudo vi /etc/paths
/usr/bin
/Applications/Xcode.app/Contents/Developer/usr/bin
/Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.8.xctoolchain/usr/bin
/bin
...

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

Во всяком случае, это просто альтернативное решение.

Надеюсь, что это поможет.

Ответ 8

@AlphaZygma это отлично поработало для меня. Я нахожусь на 10.8.5 и должен был добавить следующее в /etc/paths:

/Applications/Xcode.app/Contents/Developer/usr/bin
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

вместо вашего.

Ответ 9

Полное решение, которое позволило мне пройти:

checking for gcc... /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.8.xctoolchain/usr/bin/cc
checking whether the C compiler works... no

можно найти здесь: http://mac-dev-env.patrickbougie.com/apache/

Команда (некоторые требуют sudo su):

cd /usr/local/src (mkdir /usr/local/srt if /usr/local/src doesnt exist)
curl --remote-name http://mirror.csclub.uwaterloo.ca/apache/httpd/httpd-2.4.9.tar.gz
tar -xzvf httpd-2.4.9.tar.gz
rmhttpd-2.4.9.tar.gz
cd httpd-2.4.9

sudo xcode-select -switch /
mkdir -p /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.9.xctoolchain/usr/bin (this might require sudo su)
ln -s /usr/bin/cc /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.9.xctoolchain/usr/bin/cc (this might require sudo su)

./configure --prefix=/usr/local/apache-2.4.9
make
make install

ln -s apache-2.4.9 /usr/local/apache

Ответ 10

Недавно я обновился до Mavericks и пересоздал среду веб-разработки (включая установку порта). У меня была эта проблема, когда я обновлял порт:

checking whether the C compiler works... no

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