2

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

Несколько недель назад я узнал, что могу собрать и установить последние выпуски Octave в системе Ubuntu 12.04, выполнив следующие действия.

  1. Установите инструменты, необходимые для компиляции, связывания и запуска октавы. Для Ubuntu приведенные ниже команды сработали для меня.

    sudo apt-get build-dep octave3.2
    sudo apt-get install build-essential gnuplot gtk2-engines-pixbuf
    sudo apt-get install libfontconfig-dev bison
    
  2. Затем загрузите исходный код для выпуска Octave из архива проекта Gnu для Octave и распакуйте архив в папку в вашей системе.

  3. Используйте команды ниже, чтобы построить, проверить и установить октаву.

     ./configure
     make
     make check
     sudo make install
    

К сожалению, оказывается, что вышеизложенное создает октаву, которая содержит все таблицы символов отладки. Только объектные файлы огромны и занимают около 1,7 ГБ.

Текущая документация Octave предлагает

Для компиляции без отладочных символов попробуйте команду
make CFLAGS=-O CXXFLAGS=-O LDFLAGS=
вместо того, make просто сделать .

Однако, когда я попробовал это, это не сработало. Параметр -g все еще использовался для компиляции. Для черт этого я вместо пытался ./configure CFLAGS=-O CXXFLAGS=-O и это сделало работу. (Вместо ~ 1.7ГБ результат сборки теперь занимает около 253МБ).

Мои вопросы

  1. Это действительно правильно (рекомендуется?) метод, чтобы использовать для компиляции Octave без отладочных символов (то есть без -g)?
  2. Как бы я скомпилировал Octave, чтобы он использовал x86_64 вместо x86?
    Примечание: я не спрашиваю, как скомпилировать Octave, чтобы использовать (экспериментальные) 64-битные целые числа для измерений массива. Я просто хочу позволить компилятору использовать дополнительные регистры и размеры слов, доступные, когда приложение работает в 64-битном режиме.
  3. Доступен ли (более) полный список для директив, используемых с Make-файлом Octave?
    Я видел только make , make check и make install задокументированные. Но, видимо, make distclean тоже разрешено. (Он удаляет результаты компиляции, поэтому вы можете выполнить полную перестройку всего.)
    Мне интересно, что еще может быть доступно.

FWIW, я пытался использовать
./configure CFLAGS="-O3 -mtune=core2 -m64" CXXFLAGS="-O3 -mtune=core2 -m64"
и, что удивительно, он не только создавался, но и запускался и проходил тесты make check .

Но, конечно, это не то же самое, что сказать, что на самом деле « работает ». Есть ли рекомендуемый способ включить Octave как приложение x86_64?

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

1 ответ1

1

Это зависит от вашей версии gcc, вашего оборудования, вашего дистрибутива и многих других вещей. Как правило, ваш поставщик дистрибутивов Linux провел бы это исследование для вас и использовал бы эти опции при сборке вашего пакета. Тем не менее, дистрибутивы пытаются заставить вещи работать с большинством аппаратных средств и ожиданий пользователей. Я нахожу большинство настроек без особых проблем с Gentoo. Linux с нуля или накатить собственный дистрибутив - это много работы У меня есть установка Gentoo с отключенной 32-битной эмуляцией в ядре.

Из Руководства по оптимизации Gentoo лучше использовать -O2 вместо -O3

-O3: это максимально возможный уровень оптимизации, а также самый рискованный. Скомпилирование вашего кода с этой опцией займет больше времени, и фактически его не следует использовать для всей системы с gcc 4.x. Поведение gcc значительно изменилось с версии 3.x. В 3.x было показано, что -O3 приводит к немного более быстрому времени выполнения по сравнению с -O2, но это больше не относится к gcc 4.x. Компиляция всех ваших пакетов с -O3 приведет к большим бинарным файлам, которые требуют больше памяти, и значительно увеличит шансы сбоя компиляции или неожиданного поведения программы (включая ошибки). Недостатки перевешивают выгоды; помните принцип убывающей отдачи. Использование -O3 не рекомендуется для gcc 4.x.

-mtune=core2 нормально, если вы уверены, что это лучший выбор для вашего процессора. Мне лично нравится -march=native вместо этого. Смотрите Gentoo Safe CFlags

GCC 4.2 представляет новую опцию -march -march = native, которая автоматически определяет функции, поддерживаемые вашим процессором, и устанавливает параметры соответствующим образом. Если у вас процессор Intel или AMD и вы используете> = sys-devel/gcc-4.2.3, рекомендуется использовать -march = native.

-m64 - это опция процессора, которая должна быть автоматически установлена с помощью -mtune=core2 core2 или -march=native . См. Параметры GCC i386 и x86-64 .

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .