Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.88/41: Рейтинг темы: голосов - 41, средняя оценка - 4.88
 Аватар для артист
50 / 35 / 21
Регистрация: 17.09.2014
Сообщений: 1,615

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

22.01.2016, 13:56. Показов 9706. Ответов 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
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,819
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
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,819
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
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,819
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
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,819
24.01.2016, 22:51
Цитата Сообщение от gavrasio Посмотреть сообщение
выложите, пожалуйста, все замечания при компиляции
При компиляции замечаний нет.
Разницу видно будет если дизассемблировать получившийся исполняемый файл
1
-16 / 14 / 3
Регистрация: 22.01.2013
Сообщений: 154
24.01.2016, 23:00
Цитата Сообщение от DrOffset Посмотреть сообщение
При компиляции замечаний нет.
Разницу видно будет если дизассемблировать получившийся исполняемый файл
Тогда, какя же проблема у ТС? Напишите свой код в С++. Makfile - в нём же. Компилируйте хоть в Лине, хоть в Окнах. Результат будет одинаковый. Или я не прав?
Хотя Makfile пишется на балабалском языке( не знаю, как VS6++)
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,819
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
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,819
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
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,819
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
Ответ Создать тему
Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru