Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: i386, __x86_64 i compiler  (Прочитано 14262 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« : 06-10-2004 10:02 » 

Gospoda, pomogite pogalujsta :

est mashina , na kotoroj ustanowlen Suse linux 64 bita.
Est odin .h - file, kotorij ja dolgna includirowat, no ne imeju prawa izmenjat (eto chugoj soft), w kotorom stoit sledujushee (sut)
Код:
#elif defined(__linux)
#if ( defined (__i386__) || defined (__ia64__) || defined   (__s390x__) || defined (__s390__) )

                        // stojat razlichnie #define - s
#else
#error "sapucx.h STANDALONE on Linux and this  platform not yet implemented"
#endif
#elif...                  

Pri kompiljazii (ispolzuja makefile) ja poluchaju soobshenie

       sapucx.h STANDALONE on Linux and this  platform not yet implemented

Metodom nauchnogo tika ja wijasnila, chto na mashine opredelena constanta __x86_64.

Wopros perwij : chto woobshe oznachajet x86 , i386 i t.d. (wse eti smeshnie konstanti  :? )
Wopros wtoroj : mogu li ja w makefile - e ukazat nedostajushuju constantu (t.e. kakoj-to analog etoj __x86_64 sredi teh, kotorie prowerjajutsja w .h - file), chtobi pri kompiljazii ne woznikalo problem?

Ja ponimaju, chto woprosi durnie, no ja prosto - naprosto iz mira Window, a ne Unix - Linuxa, posemu takie peshernie woprosi   Вот такой я вот
« Последнее редактирование: 02-12-2007 10:31 от Алексей1153++ » Записан

холоднокровней, Маня, Ви не на работе
---------------------------------------
четкое определение сущности бытия:
- А мы в прошлом или в будущем?- спросила Алиса.
- Мы в жопе, - ответил кролик.
- А "жопа" - это настоящее? - спросила Алиса.
- А "жопа" - это у нас символ вечности.
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #1 : 06-10-2004 11:24 » 

Malaja, "смешные" константы типа x86 и i386 означают, если я не ошибаюсь, тип (?и архитектуру?) процессора
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« Ответ #2 : 06-10-2004 12:20 » 

MOPO3,

spasibo za info. No togda poluchaetsja, chto pri prozessore x86_64 wse wisheperechislennie w .h - file konstanti ne podhodjat?
Записан

холоднокровней, Маня, Ви не на работе
---------------------------------------
четкое определение сущности бытия:
- А мы в прошлом или в будущем?- спросила Алиса.
- Мы в жопе, - ответил кролик.
- А "жопа" - это настоящее? - спросила Алиса.
- А "жопа" - это у нас символ вечности.
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #3 : 06-10-2004 12:29 » 

Malaja, я не спец в таких вопросах. Но полгода назад у меня была задача поставить на РедХат9 какой-то там видеосервер, в спецификации которого было указано что только до версии РедХат 8 подходит. И установка вылетала как раз на момент определения версии РедХата. Именно эту строку проверки я нашол и добавил нужную мне. Всё заинстулилось и до сих пор прекрасно работает (тьфу-тьфу-тьфу) Улыбаюсь  Так что попробуй дописать у себя в
Код:
#if ( defined (__i386__) || defined (__ia64__) || defined   (__s390x__) || defined (__s390__) )
нужную тебе константу, либо допиши там #elif ,  и проверь просто, работать будет или нет.
« Последнее редактирование: 02-12-2007 10:33 от Алексей1153++ » Записан

MCP, MCAD, MCTS:Win, MCTS:Web
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« Ответ #4 : 06-10-2004 14:56 » 

MOPO3,

ti ponimaesh, eta ideja w moej golowe uge bila, no eto wrode kak ne sowsem korrektno - wrode kak chugoj file. No, sudja po wsemu, drugogo wihoda u menja net   Ха-ха-ха
Prosto ja dumala, chto eto mogno i w makefile napisat, dabi .h - file ne menjat.
Записан

холоднокровней, Маня, Ви не на работе
---------------------------------------
четкое определение сущности бытия:
- А мы в прошлом или в будущем?- спросила Алиса.
- Мы в жопе, - ответил кролик.
- А "жопа" - это настоящее? - спросила Алиса.
- А "жопа" - это у нас символ вечности.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 06-10-2004 16:16 » 

Весь вопрос в том, кто эти макро должен генерить. Я, к примеру, в ядре Linux-а не нашел ниодного "define *__i386__" , но за то кучу "if __i386__" . Кто его генерит? Уж не сам ли gcc?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« Ответ #6 : 06-10-2004 16:21 » 

RXL,

wot etogo ja ne znaju   Вот такой я вот
Edinstwennoe, chto mne podskazal kollega :
a) wizwat gcc -v
b) posmotret file /usr/lib64/gcc-lib/x86_64-suse-linux/3.3.3/specs

Imenno gde-to tam w etih debrjah ja i nashla etu __x86_64.
Prichem esli pishesh test - programmku dlja prowerki, to ona etu konstantu prekrasno raspoznaet.
Записан

холоднокровней, Маня, Ви не на работе
---------------------------------------
четкое определение сущности бытия:
- А мы в прошлом или в будущем?- спросила Алиса.
- Мы в жопе, - ответил кролик.
- А "жопа" - это настоящее? - спросила Алиса.
- А "жопа" - это у нас символ вечности.
Anonymous
Гость
« Ответ #7 : 06-10-2004 17:16 » 

Цитата: RXL
Весь вопрос в том, кто эти макро должен генерить. Я, к примеру, в ядре Linux-а не нашел ниодного "define *__i386__" , но за то кучу "if __i386__" . Кто его генерит? Уж не сам ли gcc?
А кто-ж еще-то?
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 06-10-2004 20:25 » 

Гость, а ты проверял?
"Голый" gcc ничего подобного не делает - проверено. Может ключик какой есть?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 06-10-2004 20:43 » 

Да, действительно gcc такую штуку вставляет, а так же еще много чего.
Вот пример "программы" t1.c:
Код:
#ifdef __i386__
#error Macro __i386__ is defined.
#else
#error Macro __i386__ is not defined.
#endif
А это результат компиляции:
Код:
$ gcc -E -v t1.c
Reading specs from /usr/lib/gcc-lib/i386-asplinux-linux/2.96/specs
gcc version 2.96 20000731 (ASPLinux 7.1 2.96-99.0.asp)
 /usr/lib/gcc-lib/i386-asplinux-linux/2.96/cpp0 -lang-c -v -D__GNUC__=2 -D__GNUC_MINOR__=96 -D__GNUC_PATCHLEVEL__=0 -D__ELF__ -Dunix -Dlinux -D__ELF__ -D__unix__ -D__linux__ -D__unix -D__linux -Asyste
m(posix) -D__NO_INLINE__ -Acpu(i386) -Amachine(i386) -Di386 -D__i386 -D__i386__ -D__tune_i386__ t1.c
GNU CPP version 2.96 20000731 (ASPLinux 7.1 2.96-99.0.asp) (cpplib) (i386 Linux/ELF)
ignoring nonexistent directory "/usr/i386-asplinux-linux/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/include
 /usr/lib/gcc-lib/i386-asplinux-linux/2.96/include
 /usr/include
End of search list.
t1.c:3:2: #error Macro __i386__ is defined.
« Последнее редактирование: 02-12-2007 10:35 от Алексей1153++ » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #10 : 06-10-2004 22:20 » 

Malaja, вообще дело обстоит так fh[bntrnehf ia64 это процессора от intel(intel archetecture 64) кажется Itanium а x86_64 это AMD а именно Opteron и Athlone 64 и эти архитектуры вроде как не совместимы, но если там(сырцах) не используются ассемблерные инструкции характерные только для перчисленных архитектур по можно с извесной долей уверенности предположить что они взаимо заменяемы

Поэтому предлагаю попробовать следующие варианты первое дублирование макроопределения архитектуры
Код:
#if defined (__x68_64__)
#define __ia64__
#endif
Второе т.к. эти макроопределения скорей всего гененрирует компилятор(т.к. комилировать код можно под любой из поддерживаемых процессоров) то можно посмотреть переменные CFLAGS и CXXFLAGS в Makefile и добавить туда -D__ia64__
И третье расмотреть по внимательней переменные CFLAGS и CXXFLAGS в Makefile а именно флаги -mcpu=xxx -march=xxx -mtune=xxx где xxx это обозначение архитектуры. И решить может стоит сметь архитектуру Athlone 64 на i386
флаг -mcpu указывает на оптимизацию под архитектуру при этом программа после компиляции будет работать не только на Athlon но и на других i686 совместимых
флаг -march скажет компилятору собрать такой код что он будет работать только на указанной архитектуре в плоть до не совместимости Athlon XP и Athlon
флагом -mtune не пользовался но написано в манах что оптимизурует всё подрят аля -march
вот архитектуры которые подойдут для тебя
i386
nocona - это для ai64
k8, opteron, athlon64, athlon-fx это для x86-64
единственное что у ai64 может менятся порядок следования байт в слове обратный порядок байт (относительно i386) применяется при компиляции в HP-UX например
читай man gcc Улыбаюсь
и вот тут коечего по флагам оптимизации
http://www.freehackers.org/gentoo/gccflags/flag_gcc3.html
еще можно глянуть тесты на www.spec.org а именно какие флаги для gcc использовались при тестировани данной архитектуры
« Последнее редактирование: 02-12-2007 10:35 от Алексей1153++ » Записан

Странно всё это....
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #11 : 07-10-2004 04:59 » 

LogRus, так если у меня Athlon XP 2800+, то мне нужно x86-64 ?
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« Ответ #12 : 07-10-2004 10:16 » 

LogRus,

bolshoe spasibo za objasnenie! Sejchas budu razbiratjsja s etimi dopolnitelnimi flagami, o kotorih ti napisal.
Edinstwennoe, chto menja wolnuet, chtobi ne bilo potom pobochnih effektow - t.e. kompiljazija projdet uspeshno, a potom nachnutsja neprawilnie raskladi long w Intel i long w AMD. Nado budet posmotret.
Eshe raz spasibochki!
Записан

холоднокровней, Маня, Ви не на работе
---------------------------------------
четкое определение сущности бытия:
- А мы в прошлом или в будущем?- спросила Алиса.
- Мы в жопе, - ответил кролик.
- А "жопа" - это настоящее? - спросила Алиса.
- А "жопа" - это у нас символ вечности.
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #13 : 07-10-2004 16:43 » 

MOPO3, AthlonXP это AthlonXP Улыбаюсь опцию gcc не помню но не x86-64 он его не поддерживает Улыбаюсь а так собирай с оптимизацей -O2 -mcpu=pentiumpro и будет практически на любой машине работать Ага
Malaja, не думаю что там такие изврашенцы чтобы парядок байт менять. хотя я сам писал программу которая использовала разные порядки для разных машин, но так задача такая была. а вообще там флагов оптимизации просто море и можно их долго тестировать. у меня gcc 3.4.1 в нём как раз помоему mtune и появилось и еще куча флагов потому как раньше я их в манах не видел да и структура мана слегка изменилась. Если не нужна сльная аппаратная оптимизация достаточно указания -O2 и архитектуры -O3 не советую фигня получается объем программы растёт, а производительность повышается не замтно на десятые доли процетов и собирается гораздо дольше.
Записан

Странно всё это....
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #14 : 07-10-2004 17:14 » 

LogRus, поддерживаю тебя по поводу -O2 и -O3 - на личном опыте проверил. Кроме того, рекомендую -s (для релиза), или strip делать. А так же убирать из релиза -g (встречаются и такие дистрибутивы). При сборке динамических библиоте рекомендую отключать линковку стандартных библиотек: -nostdlib.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« Ответ #15 : 08-10-2004 10:46 » 

LogRus, RXL,

spasibo za pomosh!
T.e. esli ja prawilno ponjala, w makefile dolgno stojat :

         CFLAGS=-O2 -march=k8 -strip

Wopros : dlja chego ispolzuetsja -nostdlib?
Записан

холоднокровней, Маня, Ви не на работе
---------------------------------------
четкое определение сущности бытия:
- А мы в прошлом или в будущем?- спросила Алиса.
- Мы в жопе, - ответил кролик.
- А "жопа" - это настоящее? - спросила Алиса.
- А "жопа" - это у нас символ вечности.
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #16 : 08-10-2004 18:32 » 

Malaja, а еще если рабочая станция можно сделать предварительное связывание которой позволяет быстро загружатся программмам использующим динамические либы правда за это предётся заплатить тем что при изменений библиотеки придётся повторять prelink ко всем программам использующим эту библиотеку повторно. prelink утилитка такая.
RXL, повторю вопрос от Malaja и еще чего за стрип(кого раздеть ?) такой.

ЗЫ: как-то с флагом -g всю систему собрал. Очень было интересно наблюдать сообщения о том что у приложения произошел сбой в файле mainlib.c в строке 120 при вызове какойто там функции Улыбаюсь
Записан

Странно всё это....
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #17 : 09-10-2004 11:14 » 

Цитата: LogRus
Malaja,
Код:
#if defined (__x68_64__)
#define __ia64__
#endif
Второе т.к. эти макроопределения скорей всего гененрирует компилятор(т.к. комилировать код можно под любой из поддерживаемых процессоров) то можно посмотреть переменные CFLAGS и CXXFLAGS в Makefile и добавить туда -D__ia64__

Это вы лихо -- для Opteron генерить инструкции ia64.  Они не совместимы.  Можно сильно нарваться.  Я бы для начала делал подмену на __i386__ -- не оптимально, зато на атлонах будет работать.
« Последнее редактирование: 02-12-2007 10:36 от Алексей1153++ » Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #18 : 09-10-2004 15:18 » 

npak, я не говорил генерить инструкции для ai64! Я имел ввиду что компиллер генерит для x86-64 и что бы нормально компиляция прошла выставить макро определение как будто мы для ai64 собираем а сам понимаешь компилятор ведь всё равно сгенерит для x86-64 я кстати написал что при условии что в код Си не добавили каких либо страшных инструкций которые не позволят выкинуть такой фортель. Улыбаюсь
Кстати всё таки на ты мне удобней Улыбаюсь
Записан

Странно всё это....
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #19 : 09-10-2004 16:32 » 

Malaja, strip - это не параметер, а самостоятельная команда. Параметер gcc -s . И то и другое приводит к удалению таблиц символов (имен ф-ий и т.п.), что значительно сокращает размер файла.

-nostdlib убирает файлы, линкуемые по умолчанию. Для библиотек они совершенно не нужны.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« Ответ #20 : 11-10-2004 07:55 » 

RXL,

spasibo za objasnenija!  Жжешь
Sejchas poprobuju.
Записан

холоднокровней, Маня, Ви не на работе
---------------------------------------
четкое определение сущности бытия:
- А мы в прошлом или в будущем?- спросила Алиса.
- Мы в жопе, - ответил кролик.
- А "жопа" - это настоящее? - спросила Алиса.
- А "жопа" - это у нас символ вечности.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines