что такое кросс-компилятор и кросс-платформенный?

Расширенный ответ, который был основан на ответе Джонаса, приведен ниже. Это позволяет автоматизировать нормализацию на основе наличия отрицательных и положительных чисел в векторе или ручного выбора желаемого типа нормализации. Под функцией находится тестовый скрипт.

Функция нормализации

function [vecN, vecD] = normVec(vec,varargin)
% Returns a normalize vector (vecN) and "de-nomralized" vector (vecD). The
% function detects if both positive and negative values are present or not
% and automatically normalizes between the appropriate range (i.e., [0,1],
% [-1,0], or [-1,-1].
% Optional argument allows control of normalization range:
% normVec(vec,0) => sets range based on positive/negative value detection
% normVec(vec,1) => sets range to [0,1]
% normVec(vec,2) => sets range to [-1,0]
% normVec(vec,3) => sets range to [-1,1]

%% Default Input Values
% Check for proper length of input arguments
numvarargs = length(varargin);
if numvarargs > 1
    error('Requires at most 1 optional input');
end

% Set defaults for optional inputs
optargs = {0};

% Overwrite default values if new values provided
optargs(1:numvarargs) = varargin;

% Set input to variable names
[setNorm] = optargs{:};

%% Normalize input vector
% get max and min
maxVec = max(vec);
minVec = min(vec);

if setNorm == 0
    % Automated normalization
    if minVec >= 0
        % Normalize between 0 and 1
        vecN = (vec - minVec)./( maxVec - minVec );
        vecD = minVec + vecN.*(maxVec - minVec);
    elseif maxVec <= 0
        % Normalize between -1 and 0
        vecN = (vec - maxVec)./( maxVec - minVec );
        vecD = maxVec + vecN.*(maxVec - minVec);
    else
        % Normalize between -1 and 1
        vecN = ((vec-minVec)./(maxVec-minVec) - 0.5 ) *2;
        vecD = (vecN./2+0.5) * (maxVec-minVec) + minVec;
    end
elseif setNorm == 1
    % Normalize between 0 and 1
    vecN = (vec - minVec)./( maxVec - minVec );
    vecD = minVec + vecN.*(maxVec - minVec);
elseif setNorm == 2
    % Normalize between -1 and 0
    vecN = (vec - maxVec)./( maxVec - minVec );
    vecD = maxVec + vecN.*(maxVec - minVec);
elseif setNorm == 3
    % Normalize between -1 and 1
    vecN = ((vec-minVec)./(maxVec-minVec) - 0.5 ) *2;
    vecD = (vecN./2+0.5) * (maxVec-minVec) + minVec;
else
    error('Unrecognized input argument varargin. Options are {0,1,2,3}');
end

Скрипт для проверки функции

% Define vector
x=linspace(0,4*pi,25);
y = sin(x);
ya=sin(x); yb=y+10; yc=y-10;

% Normalize vector
ya0=normVec(ya); yb0=normVec(yb); yc0=normVec(yc);
ya1=normVec(ya,1); yb1=normVec(yb,1); yc1=normVec(yc,1);
ya2=normVec(ya,2); yb2=normVec(yb,2); yc2=normVec(yc,2);
ya3=normVec(ya,3); yb3=normVec(yb,3); yc3=normVec(yc,3);

% Plot results
figure(1)
subplot(2,2,1)
plot(x,ya0,'k',x,yb0,'ro',x,yc0,'b^')
title('Auto Norm-Range')
subplot(2,2,2)
plot(x,ya1,'k',x,yb1,'ro',x,yc1,'b^')
title('Manual Norm-Range: [0,1]')
subplot(2,2,3)
plot(x,ya2,'k',x,yb2,'ro',x,yc2,'b^')
title('Manual Norm-Range: [-1,0]')
subplot(2,2,4)
plot(x,ya3,'k',x,yb3,'ro',x,yc3,'b^')
title('Manual Norm-Range: [-1,1]')
6
задан ysth 27 August 2010 в 22:18
поделиться

5 ответов

Когда говорят о кроссплатформенности, имеется в виду архитектура процессора, то есть X86 и X64? или ОС

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

UNIX не имеет различных разновидностей, таких как 64-битная или 32-битная.

Есть.

Итак, если программа скомпилирована в x86, а файл msi был создан на x64, будет ли она работать как на X64, так и на x86, или на любом из них?

Если вы нацеливаетесь на x86, amd64 также запускает код (в 32-битном Режим). Не имеет значения, где вы создаете msi-файл установщика.

Кросс-компиляция означает, что хост и целевая платформа не совпадают. Например, создание программного обеспечения Windows на компьютере Linux.

13
ответ дан 8 December 2019 в 05:57
поделиться

Кросс-платформенность относится к способности программы работать на нескольких разных платформах. Кросс-платформенный код часто использует различные инструменты / языки для достижения этой цели (Qt, Flash и т. Д.)

Кросс-компилятор - это компилятор, который генерирует код для платформы, отличной от платформы, на которой работает сам компилятор. Компиляторы для встроенных целей почти всегда являются кросс-компиляторами, так как немногие встроенные цели могут размещать сам компилятор.

Для кросс-компиляторов требуется система сборки, которая не предполагает, что хост и целевая система совместимы, то есть вы не можете запустить целевой исполняемый файл во время сборки, например, чтобы выяснить аспекты выполнения сгенерированного кода (например, размер слова).

(Кросс-компиляция также может применяться к самому компилятору. Это называется канадской кросс-компиляцией , которая представляет собой метод построения (кросс-) компилятора на хосте, отличном от того, на котором компилятор должен быть запущен. В этом случае у нас есть три платформы:

  • Платформа, на которой построен компилятор (сборка).
  • Платформа, на которой размещается компилятор (хост).
  • Платформа, для которой компилятор генерирует код (цель).

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

6
ответ дан 8 December 2019 в 05:57
поделиться

Кросс-платформа, я полагаю, может указывать на то, что она работает либо на Windows / Mac / * nix, либо на x86 / x86_64 / ARM / PPC, но если не указано иное, я считаю, что обычно это означает, что он работает в разных операционных системах. Например, «Java-приложения являются кроссплатформенными», это обычно относится к тому факту, что Java-приложения могут работать на Win / Mac / * nix.

1
ответ дан 8 December 2019 в 05:57
поделиться

«кроссплатформенность» относится к вещам, работающим на многих различных платформах, например, ОС или ЦП (тип (x86 / MIPS) или размер бит (32/64)). Это не означает, что требуется перестроение для работы на других платформах, но это возможно, например, QT может нацеливаться на многие платформы, но вам может потребоваться перестройка приложения на каждой, или вы можете построить один раз, например java или .Net

«кросс-компилятор» означает компилятор на этой платформе, который создает программу, которая может работать на другой платформе. Таким образом соберите исполняемые файлы WinCE на Win32. Или вы можете создать приложение Linux в оконном блоке, создав версию GCC, которая работает в Windows, но конечной целью вывода является Linux / Elf. Если у вас есть встроенное устройство, вы почти всегда выполняете кросс-компиляцию для создания целевого исполняемого файла.

X86, X64 или любой процессор. Что это значит? Он контролирует, как приложение .Net нацелено на одну архитектуру или нет, если вы нацелены, оно не будет работать на обеих, но многие компиляторы делают некоторые оптимизации. Если это нецелевые (любой ЦП), он будет работать на обоих. Это в основном полезно, если вы напрямую вызываете внешние .dll и жестко связываете 64-битную или 32-битную версию, и поэтому хотите, чтобы ваше приложение работало только в той же среде.

На передней панели установщиков 64-разрядная Windows может запускать 32-разрядные приложения и 32-разрядные установщики, тогда как 64-разрядные приложения не могут работать в 32-разрядных системах. На других платформах вы обычно перестраиваете код для своей архитектуры (Linux) или на Mac вы загружаете универсальные исполняемые файлы (которые, как мне кажется, содержат несколько целевых сборок внутри)

1
ответ дан 8 December 2019 в 05:57
поделиться

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

Кросс-компилятор: Кросс-компиляторы - это те, которые генерируют исполняемые файлы из исходного кода, который, в свою очередь, будет выполняться в другой системе, в которой компилятор доступен.

Найдите примеры нативных и кросс-компиляторов на BoundsCheck

1
ответ дан 8 December 2019 в 05:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: