Аватар для артист
50 / 35 / 21
Регистрация: 17.09.2014
Сообщений: 1,615

Компиляция проекта под linux из windows

22.01.2016, 13:56. Показов 9952. Ответов 58
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Скорее всего раздел не подходит, просто не знаю к какому это относится больше...

Вот есть проект Visual Studio C++, это библиотека для программы, в проекте есть файл makefile.
Чтобы скомпилировать этот файл в *.so нужно линукс устанавливать, что - ли?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.01.2016, 13:56
Ответы с готовыми решениями:

Сборка проекта под Windows, Linux и MacOS и тестирование
Есть приложение с графическим интерфейсом которое нужно собрать под поддерживаемые версии Windows, Linux и MacOS и протестировать их на...

Компиляция проекта из-под Linux для Win32
Здравствуйте. Я работаю из под Linux, нужно что-бы созданная мною программа работали и под win32. В параметрах проекта указал нужную...

Компиляция Builder'овского проекта под Linux, (и освоение Linux после Builder'a)
Есть не очень маленький проект, написанный в винде на Builder'e. 1) Сложно ли его будет отредактировать что бы откомпилировать в...

58
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
24.01.2016, 00:43
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от артист Посмотреть сообщение
Я вообще не знаю о чём вы
Он говорит о консоли. Она же терминал. Чёрное окно, в котором можно с компом общаться в режиме командной строки.
В семёрке находится в меню Пуск -> Все программы - > Стандартные -> Командная строка

Добавлено через 2 минуты
Цитата Сообщение от gavrasio Посмотреть сообщение
А в Окнах есть такое движение насчёт нативных линусовских программ?
Есть. Cygwin.
1
-16 / 14 / 3
Регистрация: 22.01.2013
Сообщений: 154
24.01.2016, 00:53
Цитата Сообщение от gru74ik Посмотреть сообщение
Есть. Cygwin.
Если можно, дайте краткий пример.
1
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
24.01.2016, 00:56
gavrasio, я знаю, что есть такая штуковина. Но сам ей никогда не пользовался. Так что, увы, примеров дать не могу.

Не по теме:

Астрологи объявили Неделю Самостоятельности. Польза от знаний, полученных самостоятельно, увеличена вдвое.

1
-16 / 14 / 3
Регистрация: 22.01.2013
Сообщений: 154
24.01.2016, 01:05
Цитата Сообщение от gru74ik Посмотреть сообщение
gavrasio, я знаю, что есть такая штуковина. Но сам ей никогда не пользовался. Так что, увы, примеров дать не могу. Не по теме: Астрологи объявили Неделю Самостоятельности. Польза от знаний, полученных самостоятельно, увеличена вдвое
А я всё таки в тему. Компилятор g++ что в Линуксе, что в Окнах - один и тотже. В Линуксе проблем нет, все Окна ловит. А в Окнах нативную, допустим, PonyProg2000, как поймать?
1
24.01.2016, 01:13

Не по теме:

Цитата Сообщение от gru74ik Посмотреть сообщение
Астрологи объявили Неделю Самостоятельности. Польза от знаний, полученных самостоятельно, увеличена вдвое.
Герой Меча и Магии X?:D

0
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
24.01.2016, 02:28
gavrasio, Cygwin - это не тоже самое, что Wine. Cygwin позволяет получить совместимость на уровне исходного кода. Нативно собранный бинарь в Linux на Windows он не запустит. Можно сказать, что Cygwin эмулирует POSIX окружение, для того, чтобы можно было скомпилировать большинство POSIX программ. В том числе, можно взять исходный код компилятора GCC и без всяких дополнительных патчей, совершенно штатно собрать в Cygwin кросскомпилятор с *nix таргетом. Базовое окружение (большинство заголовочных файлов, утилиты командной строки, bash) в Сygwin уже присутствуют.
2
-16 / 14 / 3
Регистрация: 22.01.2013
Сообщений: 154
24.01.2016, 20:41
Цитата Сообщение от DrOffset Посмотреть сообщение
gavrasio, Cygwin - это не тоже самое, что Wine. Cygwin позволяет получить совместимость на уровне исходного кода. Нативно собранный бинарь в Linux на Windows он не запустит. Можно сказать, что Cygwin эмулирует POSIX окружение, для того, чтобы можно было скомпилировать большинство POSIX программ. В том числе, можно взять исходный код компилятора GCC и без всяких дополнительных патчей, совершенно штатно собрать в Cygwin кросскомпилятор с *nix таргетом. Базовое окружение (большинство заголовочных файлов, утилиты командной строки, bash) в Сygwin уже присутствуют.
В Линукс и Окнах компилятор g++, по-идее одно и тоже. Или он написан по разному для каждой ОС? В Линуксе я через консоль компилирую mfile.cpp. В Окнах я делаю тоже самое в терминале через командную строку. В чём должна быть проблема? Не могу проверить в терминале потому, что я командную строку вызываю у себя через Wine.
Или для приложений это не действует?
1
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
24.01.2016, 21:38
Цитата Сообщение от gavrasio Посмотреть сообщение
В чём должна быть проблема?
Проблема в разном ABI.
2
-16 / 14 / 3
Регистрация: 22.01.2013
Сообщений: 154
24.01.2016, 22:02
Цитата Сообщение от DrOffset Посмотреть сообщение
Проблема в разном ABI.
Понятно( немного). Спасибо!

Добавлено через 17 минут
Цитата Сообщение от DrOffset Посмотреть сообщение
Проблема в разном ABI.
А давайте сделаем эксперимент.
Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include<iostream>
 using namespace std;
 
 int main()
 {
   int A=10, *pA=&A, *pB=new int;  //только один раз декларируется int: int*pB=new int
  cout<<"Введу *pB"<<endl; cin>>(*pB); 
  //*pB=15;
     cout<<"\tA:"<<A<<"\t*pA:"<<*pA<<"\tpA:"<<pA<<"\t&A:"<<&A<<endl;
     cout<<"\t*pB:"<<*pB<<"\tpB:"<<pB<<endl;
     cout<<"Очищаем и обновляем *pB"<<endl;
     delete pB;
     //pB=NULL;
 
     cout<<"\t*pB:"<<*pB<<"\tpB:"<<pB<<endl;
 
     pB=new int; *pB=28;  //впоследствии int не пишется: pB=new int
     cout<<"\t*pB:"<<*pB<<"\tpB:"<<pB<<endl;
      cout<<"Если 0, выхожу из main, возвращаю -1"<<endl; cin>>(*pB); 
    if(*pB==0)
    return(-1);
    
     while(1)
     {
         delete pB;
         cout<<"\t*pB:\t"<<*pB<<endl<<"\tpB:\t"<<pB<<endl;
     cout<<"Изменяем *pB:";pB=new int; cin>>*pB;
     cout<<"\t*pB:"<<*pB<<"\tpB:"<<pB<<endl;
     if(*pB==0)break;
     delete pB;
     cout<<"Изменяем указатель через new. *pB:"; pB=new int; cin>>*pB;
     cout<<"\t*pB:"<<*pB<<"\tpB:"<<pB<<endl;
     if(*pB==0)break;
     }
 
   return 0;
 
}
Откомпелируйте у себя. Что получится?
1
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
24.01.2016, 22:13
Цитата Сообщение от gavrasio Посмотреть сообщение
Что получится?
Можно даже не пробовать. Итак понятно что. Зависимый от платформы бинарник получится. Под win он будет в формате PE, в linux - ELF.
Если мы собираем в GCC, то бинарник получится зависимым от libstdc++, которая, в свою очередь, зависима от системных библиотек.
В Win - это как правило user32.dll, kernel32.dll, MS C-runtime - msvcrt.dll.
В Linux - это как минимум libc.so.

Ассемблерный листинг пользовательского кода (т.е. того, что пользователь сам пишет) может значительно не отличаться при условии, что платформа (напр. Intel x86) одна и та же. Но возможны нюансы. Например повлияет использование типов зависимых от ОС, например wchar_t в Win принят 2 - байта, в Linux - 4 байта. И таких тонкостей будет до черта, все это в совокупности, собственно, и образует ABI.
3
-16 / 14 / 3
Регистрация: 22.01.2013
Сообщений: 154
24.01.2016, 22:43
Цитата Сообщение от DrOffset Посмотреть сообщение
Можно даже не пробовать. Итак понятно что. Зависимый от платформы бинарник получится. Под win он будет в формате PE, в linux - ELF.
Если мы собираем в GCC, то бинарник получится зависимым от libstdc++, которая, в свою очередь, зависима от системных библиотек.
В Win - это как правило user32.dll, kernel32.dll, MS C-runtime - msvcrt.dll.
В Linux - это как минимум libc.so.
Ассемблерный листинг пользовательского кода (т.е. того, что пользователь сам пишет) может значительно не отличаться при условии, что платформа (напр. Intel x86) одна и та же. Но возможны нюансы. Например повлияет использование типов зависимых от ОС, например wchar_t в Win принят 2 - байта, в Linux - 4 байта. И таких тонкостей будет до черта, все это в совокупности, собственно, и образует ABI.
А Вы всё-таки попробуйте скомпилировать через командную строку и выложите, пожалуйста, все замечания при компиляции. Очень интересно, что там будет написано.
1
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
24.01.2016, 22:51
Цитата Сообщение от gavrasio Посмотреть сообщение
выложите, пожалуйста, все замечания при компиляции
При компиляции замечаний нет.
Разницу видно будет если дизассемблировать получившийся исполняемый файл
1
-16 / 14 / 3
Регистрация: 22.01.2013
Сообщений: 154
24.01.2016, 23:00
Цитата Сообщение от DrOffset Посмотреть сообщение
При компиляции замечаний нет.
Разницу видно будет если дизассемблировать получившийся исполняемый файл
Тогда, какя же проблема у ТС? Напишите свой код в С++. Makfile - в нём же. Компилируйте хоть в Лине, хоть в Окнах. Результат будет одинаковый. Или я не прав?
Хотя Makfile пишется на балабалском языке( не знаю, как VS6++)
0
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
24.01.2016, 23:20
Цитата Сообщение от gavrasio Посмотреть сообщение
Тогда, какя же проблема у ТС? Напишите свой код в С++. Makfile - в нём же. Компилируйте хоть в Лине, хоть в Окнах. Результат будет одинаковый. Или я не прав?
Что понимается под результатом? Если внешняя видимость работы, то да, будет одинаково.
Исполняемый файл же будет разный. Каждый под свою платформу.
В штатном режиме, компилятор собирает исполняемый файл под платформу, на которой сам запускается.
Для того, чтобы получить исполняемый файл для чужой платформы существуют кросскомпиляторы.
В Linux можно собрать чужеродный Windows-бинарник, используя кросскомпилятор mingw. И запустить его потом используя Wine, который эмулирует виндовое окружение. Это все относительно штатные средства, есть практически в любом дистрибутиве.
В Windows, чтобы сделать тоже самое, штатных средств нет. Поэтому ТСу и было предложено поставит Сygwin, который содержит *nix-совое окружение и допускает без проблем собрать или установить кросскомпилятор для сборки *nix-бинарников. Запустить же их под Windows так же просто не получится. Решения конечно есть, все исходят из виртуализации, вот, например, вариант с использованием qemu и специального дистрибутива linux: http://ashishware.com/LinuxOnWindows.shtml.

Добавлено через 1 минуту
Собственно проблема ТС в том, что он не знает(л) какими инструментами можно скомпилировать исполняемый файл под Linux из Windows.
0
-16 / 14 / 3
Регистрация: 22.01.2013
Сообщений: 154
25.01.2016, 00:00
Цитата Сообщение от DrOffset Посмотреть сообщение
Собственно проблема ТС в том, что он не знает(л) какими инструментами можно скомпилировать исполняемый файл под Linux из Windows.
Так я ненастойчиво говорил ТопикСтайтеру, что это по идее есть командная строка в терминале( в Лине - консоль). Графические приложения не катят( это только опыт линуксоида). потому что там могут быть подводные камни, хотя вся графика, в конечном счёте, упирается в консоль. И ещё. Если ТС работает в VS6 - при чём здесь Makfile? Вы что собираете и компилируете программу из нескольких файлов? Так это решается на уровне графики без Майкфайла.
0
Полярный
 Аватар для dimcoder
477 / 449 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
25.01.2016, 00:05
Цитата Сообщение от DrOffset Посмотреть сообщение
с использованием qemu и специального дистрибутива linux: http://ashishware.com/LinuxOnWindows.shtml.
Есть еще вариант VMWare (или virtual box) + Puppy Linux. Я ставил, работал очень быстро. Даже не приходилось перезагружать, просто ставил на паузу(< 15 секунд)/продолжал(< 7 секунд). Звук и интернет работали сразу (даже шара файлов с хостом, что приятно удивило). Однако Puppy оказался слишком сырым для моего вкуса, да и свободная оперативка была - поставил Hydrogen (crunchbang). Временные отрезки чуть-чуть увеличились, но это стоило того. Рекомендую. Если все это поставить на рельсы SSD, работать станет даже весело.

А какие преимущества у cygwin (я им не пользовался)? Скорость? Опять же, тестить потом...
0
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
25.01.2016, 00:23
Цитата Сообщение от gavrasio Посмотреть сообщение
работает в VS6 - при чём здесь Makfile?
VS НЕ собирает исполняемые файлы для Linux.
Makefile пригодится при сборке кросскомпилятором.

Цитата Сообщение от dimcoder Посмотреть сообщение
А какие преимущества у cygwin (я им не пользовался)?
Преимущества? Сравнивать с виртуалкой как бы некорректно. Это разные вещи
В приниципе конечно можно поставить Linux либо на виртуалку, либо сразу на железо, но ТС же ясно дал понять, что хочет по возможности этого избежать. Отсюда советы такие.

Добавлено через 10 минут
gavrasio, честно говоря в твоих строках читается такое чудовищное непонимание, что даже страшно. В общем давай на пальцах еще раз.
1) По умолчанию в windows вообще нет никакого компилятора.
2) Родная командная строка в Windows малофункциональная.
3) Компилятор в VS собирает только под Windows.
4) G++, который в составе Mingw для Windows собирает только под Windows.
5) Cygwin - это как раз *nix-совая командная строка для винды. Там есть bash, утилиты командной строки, make и набор разных компиляторов:
- Есть компиляторы которые собирают *nix исходники под windows. Cygwin в этом плане упрощает портирование, т.к. эмулирует POSIX (Windows нативно POSIX поддерживает весьма ограниченно).
- Есть компиляторы, которые собирают под другие целевые платформы (кросскомпиляторы), в данном случае ТСу нужен Linux x86.
0
-16 / 14 / 3
Регистрация: 22.01.2013
Сообщений: 154
25.01.2016, 00:34
Цитата Сообщение от DrOffset Посмотреть сообщение
Собственно проблема ТС в том, что он не знает(л) какими инструментами можно скомпилировать исполняемый файл под Linux из Windows.
А зачем ему запускать исполняемый файл a.out( насчёт скомпилировать исполняемый файл под Linux - это Вы поторопились), если у него его нет, откуда он возмётся? Он же в Окне сидит.
0
Полярный
 Аватар для dimcoder
477 / 449 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
25.01.2016, 00:37
Цитата Сообщение от DrOffset Посмотреть сообщение
Сравнивать с виртуалкой как бы некорректно. Это разные вещи
Было бы еще некорректнее сравнивать одинаковые вещи И все же мне правда интересно когда использовать cygwin вместо виртуалки разумнее и/или удобнее в сравнении с шустрой виртуалкой (если при этом нужно тестировать прогу, конечно).
Цитата Сообщение от DrOffset Посмотреть сообщение
В приниципе конечно можно поставить Linux либо на виртуалку, либо сразу на железо, но ТС же ясно дал понять, что хочет по возможности этого избежать. Отсюда советы такие.
Пролистал всю тему и не увидел сообщения где ТС что-то говорил про невозможность использовать виртуалку
Цитата Сообщение от gavrasio Посмотреть сообщение
Так это решается на уровне графики без Майкфайла.
Вы имеете ввиду просто добавить файлы в тот же codeblocks на лине?
0
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
25.01.2016, 00:39
gavrasio, Я что, в пустоту пишу? Может хватит издеваться-то?
ТС спрашивал о возможности находясь в Windows скомпилировать испоняемый файл, который потом можно будет запустить в Linux.
Такая возможность ЕСТЬ и я нигде не торопился.
И вообще, я уже устал одно и то же писать...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.01.2016, 00:39

QT компиляция из Windows под Linux
Поделитесь, если не сложно, линком как сие делать.

Компиляция под Windows из Linux
Компиляция под Windows из Linux - возможно ли это? По идее как-то можно с MinGW, есть у кого опыт?

Компиляция ядра linux из-под Windows
Можно ли как-то компилировать ядро linux на Windows XP? :scratch: Система стоит на виртуальной машине. Хотелось бы узнать все подробности :)

Qt: кросс-компиляция из windows под linux
День добрый, пытаюсь настроить компилятор qt, чтобы тот мог компилировать под linux на windows. Пусть к компилятору указал к...

Портирование Linux проекта под Windows
Есть проект Audacious аудио плеера под Linux. Он портирован под Windows c использованием MinGw. Можно ли каким-то образом из портированой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Опции темы

Новые блоги и статьи
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru