Форум программистов, компьютерный форум, киберфорум
Наши страницы

Объектные файлы *.obj, *.o - они случайно не кроссплатформенные? Если нет, то реальна ли конвертация? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Захват изображения с одного монитора и копирование его на второй, подключенные к одному и тому же компьютеру http://www.cyberforum.ru/cpp/thread1282425.html
Друзья, подскажите пожалуйста. Имеется два монитора, подключенных к одному компьютеру. Нужно реализовать захват экрана одного монитора, для вывода в свое окошко на другой монитор. Самое главное, что...
C++ В поисках логики Проблема известная но окончательного ответа я так и не нашел... int a,b; a=(0.1+0.7)*10; b=(0.1+0.8)*10; cout << a << ' ' <<b; // 7 9 http://www.cyberforum.ru/cpp/thread1281706.html
Зависит ли производительность приложения от версии ABI? C++
Привет народ, такой вопрос: начал тут копаться в командах GCC и наткнулся на -fabi-version= n, где n. Почитал что такое ABI - это набор реализаций механизмов, объявленных стандартом, так вот, влияет...
C++ Используя функцию MPI_Alltoall, переслать в каждый процесс три очередных числа
Доброго времени суток, как выяснилось, для меня параллельное программирование что то из рода неясного.До сих пор не могу въехать в саму суть этого дела, на этом ступор у меня. Необходимо сделать вот...
C++ Прекращение работы программы http://www.cyberforum.ru/cpp/thread1281428.html
int main() { string s; int c=0; int g={0}; int j=1,i=1; cin>>s;
C++ Требуется написать скрипт (.tcl) для командной irc-викторины Требуется написать скрипт (.tcl) командной irc-викторины (teamquiz) для бота. подробнее

Показать сообщение отдельно
Evg
Эксперт CАвтор FAQ
18375 / 6422 / 441
Регистрация: 30.03.2009
Сообщений: 17,813
Записей в блоге: 28
24.10.2014, 15:31
В общем случае объектный код является платформо-зависимым. И вовсе не потому, что формат файла разный или заголовки другие. Я говорю чисто про код.

Если мы возьмём функцию, которая тупо берёт два параметра, складывает их и возвращает результат, то даже такой код может оказаться непереносимым. Из-за того, что на linux и на windows могут быть разные правила передачи параметров или настройки стека. Здесь я говорю не о факте, а о предположении. Но рано или поздно среди даже простых вещей можно нарваться на то, что действительно имеет разный способ представления на разных операционных системах.

То, что на linux'е и windows'е в общем случае разный набор библиотечных функций - тут более-менее очевидно, обсуждать даже не стоит.

На разных платформах могут иметь разную реализацию структуры данных, лезущие из библиотеки (типа struct stat, struct sigaction и т.п.), а потому обращение к одному полю при компиляции на linux выльется в обращение к другому полю при компиляции на windows

Добавлено через 1 минуту
Цитата Сообщение от zoolog117 Посмотреть сообщение
Пишем простой код на си, без всяких платформо- и компиляторозависимых функций
Для того в системе и есть файл stdio.h, чтобы платформо-зависимые вещи были реализованы внутри него, а снаружи использовался лишь платформо-независимы интерфейс.

Добавлено через 5 минут
Вот, например, пример, в котором с виду всё просто и независимо:

C
#include <signal.h>
 
struct sigaction S;
 
void func (void)
{
  S.sa_flags = 0;
}
Компилируем его одним и тем же приказом на sparc-linux и sparc-solaris:

Код
# sparc-linux
$ gcc t.c -O2 -S
$ cat t.s
...
func:
        sethi   %hi(S+132), %g1
        jmp     %o7+8
         st     %g0, [%g1+%lo(S+132)]
...
Код
# sparc-solaris
$ gcc t.c -O2 -S
$ cat t.s
...
func:
        sethi   %hi(S), %g1
        retl
        st      %g0, [%g1+%lo(S)]
...
Видим, что на одной операционной системе смещение до поля sa_flags в структуре равно 132 байта, а на другой - 0
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.