Кросс-платформенное программирование [закрывается]

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

Проверьте комментарий ниже, чтобы лучше понять. Единственным недостатком является то, что некоторые значения должны быть установлены вручную в зависимости от высоты элемента. Вы также заметите значение вершины, которое также необходимо установить вручную в зависимости от размера экрана, чтобы имитировать поведение нижней ручки.

#root-container {
  display: flex;
}

#container1 {
  width: 100px;
  height: 500px;
  background-color: grey;
}

#sticky-container {
  width: 320px;
  max-height: 500px;
  position: relative;
  background-color: lightgrey;
}

#sticky-container-header {
  width: 320px;
  height: 100px;
  background-color: #2f4d92;
}

#full-height-content {
  width: 100%;
  height: 400px;
  overflow-y: scroll;
  background-color: #d67e23;
  margin-top:-20px; /*same as the margin-bottom*/
}

#sticky-content {
  width: 80%;
  height: 100px;
  margin-top:-100px; /*same as height*/
  margin-bottom:20px; /*to avoid going under the bottom:20px we want*/
  position: sticky;
  top:calc(100vh - 100px - 20px);
  background-color: rgba(0,0,0,0.5);
}

#bottom {
  width: 420px;
  height: 100px;
  background-color: purple;
}

body {
  margin:0;
}
<div id='root-container'>
  <div id="container1"></div>
  <div id="sticky-container">
    <div id='sticky-container-header'></div>
    <div id='sticky-content'></div>
    <div id='full-height-content'>
      Saw yet kindness too replying whatever marianne. Old sentiments resolution admiration unaffected its mrs literature. Behaviour new set existence dashwoods. It satisfied to mr commanded consisted disposing engrossed. Tall snug do of till on easy. Form not calm new fail. 

His followed carriage proposal entrance directly had elegance. Greater for cottage gay parties natural. Remaining he furniture on he discourse suspected perpetual. Power dried her taken place day ought the. Four and our ham west miss. Education shameless who middleton agreement how. We in found world chief is at means weeks smile. 

Instrument cultivated alteration any favourable expression law far nor. Both new like tore but year. An from mean on with when sing pain. Oh to as principles devonshire companions unsatiable an delightful. The ourselves suffering the sincerity. Inhabit her manners adapted age certain. Debating offended at branched striking be subjects. 

Must you with him from him her were more. In eldest be it result should remark vanity square. Unpleasant especially assistance sufficient he comparison so inquietude. Branch one shy edward stairs turned has law wonder horses. Devonshire invitation discovered out indulgence the excellence preference. Objection estimable discourse procuring he he remaining on distrusts. Simplicity affronting inquietude for now sympathize age. She meant new their sex could defer child. An lose at quit to life do dull. 

Surrounded affronting favourable no mr. Lain knew like half she yet joy. Be than dull as seen very shot. Attachment ye so am travelling estimating projecting is. Off fat address attacks his besides. Suitable settling mr attended no doubtful feelings. Any over for say bore such sold five but hung. 
Lose john poor same it case do year we. Full how way even the sigh. Extremely nor furniture fat questions now provision incommode preserved. Our side fail find like now. Discovered travelling for insensible partiality unpleasing impossible she. Sudden up my excuse to suffer ladies though or. Bachelor possible marianne directly confined relation as on he. 

Unpacked reserved sir offering bed judgment may and quitting speaking. Is do be improved raptures offering required in replying raillery. Stairs ladies friend by in mutual an no. Mr hence chief he cause. Whole no doors on hoped. Mile tell if help they ye full name. 

Cultivated who resolution connection motionless did occasional. Journey promise if it colonel. Can all mirth abode nor hills added. Them men does for body pure. Far end not horses remain sister. Mr parish is to he answer roused piqued afford sussex. It abode words began enjoy years no do no. Tried spoil as heart visit blush or. Boy possible blessing sensible set but margaret interest. Off tears are day blind smile alone had. 

Spot of come to ever hand as lady meet on. Delicate contempt received two yet advanced. Gentleman as belonging he commanded believing dejection in by. On no am winding chicken so behaved. Its preserved sex enjoyment new way behaviour. Him yet devonshire celebrated especially. Unfeeling one provision are smallness resembled repulsive. 

Entire any had depend and figure winter. Change stairs and men likely wisdom new
    </div>
  </div>
</div>
<div id="bottom">
</div>

6
задан juan 7 May 2009 в 19:11
поделиться

12 ответов

I think you should go ahead and do it under Linux (gcc?). This will teach you some stuff about 'old school' programming. Forget about using an IDE, use vim (if you already get it) or nedit (more like notepad).

Compile on the command line. Link it yourself. Write a make file to do this.

This is the basics. You need to understand it before using an IDE. Do this while you are still at university, because it's a pain and you will (and should) want to use an IDE for real work!

Also, a basic understanding of Unix is not hard to achieve (I have found my way around Solaris, Ubuntu and OS X, coming from a Windows background) - a few simple tutorials should get you up and running. For writing small school projects, there is not much you need to know: cd, ls, mkdir, make, gcc (be sure to use g++ for C++ projects - that has bitten me on my Mac before...). Stay close to your home directory (~).

Doing your project on the target system will help you get certain stuff right: When doing these simple sockets and pthreads examples, I found compiling and linking them to be non-platform portable. On certain systems, linking in the libraries needs to be done this way, on others that way.

BTW: If you really do want to do this under Windows, your best bet is to have a POSIX environment under Windows. POSIX sockets are different to the Windows networking model if I remember correctly.

Try either MinGW or Cygwin. Both should give you the *nix development environment under Windows. You can use your favorite text editor (a Windows port of vim?) and cmd.exe instead of bash for starting the compiler :)

EDIT: Sorry, if the tone is confrontational (according to comment). I will try to soften it a bit. It's just... I have seen quite a few people trying to learn C/C++ (or Java for that matter) with IDEs and have come to believe that they get in the way for starting off. Sure, you will need better tools for real life programs, but the overhead of project files etc. for school sample projects adds clutter. It also makes it harder to email your homework to your teacher - a zip with a bunch of .c and .h files and a makefile is really as simple as it gets...

27
ответ дан 8 December 2019 в 02:02
поделиться

Хуан,

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

Вам нужно либо переосмыслить свое участие в программировании, либо смириться и приложить усилия, чтобы научиться ориентироваться в Linux. , который далеко не так сложен, как любой полезный язык программирования.

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

Я согласен с другими, что если вы установите что-то вроде Ubuntu Linux, научиться этому не так уж и сложно. Но чтобы ответить на ваш реальный вопрос, главная проблема - избежать непреднамеренного использования Windows API. Моя любимая среда для этого - набор инструментов AT&T U / Win , который предназначен для компиляции приложений POSIX в Windows. Похоже, что он вызывает меньше жалоб от разработчиков, чем mingw, который, в свою очередь, вызывает меньше жалоб, чем cygwin.

2
ответ дан 8 December 2019 в 02:02
поделиться

Во-первых: установите Cygwin, это обеспечивает UNIX-подобную среду для окон с API POSIX, которую MingW не предоставляет, например fork () . Таким образом, вы сможете работать в Windows и чувствовать себя как в Linux.

Второе: Я бы предложил привыкнуть к Linux / установить его, зная, что среда Linux / UNIX сделает вашу жизнь в университете (а не только там) намного проще.

4
ответ дан 8 December 2019 в 02:02
поделиться

Если он не использует специальный код Windows API или некросс-платформенные библиотеки, и если это стандартный C ++ - если он не использует специфические функции компилятора Microsoft - тогда он должен быть перекрестным платформа и работа на Linux.

Компилятор, поставляемый с Linux, называется GCC. Существует версия для Windows под названием MinGW . Вы можете попробовать это перед тем, как попробовать Linux. Если он компилируется на MinGW, он обязательно будет компилироваться на Linux. (Проблема в том, что MinGW не обновлен до последних версий GCC ...)

Для использования библиотек, которые не являются кроссплатформенными (возможно, библиотеки GUI), вам придется их изменить, но большинство библиотеки GUI, не зависящие от ОС, в любом случае являются кроссплатформенными. Что касается других библиотек, я думаю, вы найдете аналогичные на других платформах.

0
ответ дан 8 December 2019 в 02:02
поделиться

Если вы придерживаетесь стандартов C / C ++, у вас не должно возникнуть проблем с переносом хорошо написанного кода из Windows в UNIX с небольшой настройкой включенных заголовков и т.п.

Я предполагаю, что нет графического интерфейса, кроме командной строки, так как это назначение клиент / сервер под Linux, что делает это возможным. Но будьте очень осторожны, придерживайтесь сокетов в стиле unix и стандартов C / C ++ и не используйте какие-либо библиотеки Windows или ярлыки.

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

Как Windows, так и Unix-платформы предлагают API-интерфейсы Berkeley Sockets , но реализация Windows имеет некоторые отличия, например, использование WSAStartup () и Функции WSACleanup () . Помимо этого, несколько #ifdef и приложение будут компилироваться на обеих платформах без каких-либо проблем. Предполагая, что это, конечно, должно быть простое приложение командной строки. В MSDN есть раздел Перенос приложений сокетов на Winsock . Все, что вам нужно сделать, это работать в обратном направлении. ;)

Также прочтите книгу по программированию сокетов, например, Beej's Guide to Network Programming .

Другой вариант - использовать Boost :: Asio . Это очень плавно скрывает любые различия API сокетов.

2
ответ дан 8 December 2019 в 02:02
поделиться

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

Linux (особенно ubuntu) не так уж и сложен в использовании, но отсутствие реальной IDE для развитие обычно сбивает людей с толку. Я рекомендую вам скомпилировать с помощью Cygwin для Windows и попробовать редактор кода под названием CodeBlocks, пока вы это делаете. Cygwin скомпилирует ваш код с библиотеками Linux, а не с библиотеками Windows (а затем имитирует эти библиотеки, используя Windows .dll при запуске), так что это хороший способ ознакомиться с вашими ограничениями.

3
ответ дан 8 December 2019 в 02:02
поделиться

Вместо того, чтобы вырезать и вставить, разделите ваш проект на файлы, не зависящие от платформы, и файлы, специфичные для платформы, и / или используйте директивы препроцессора для настройки кода. Большая часть моей работы связана с Windows, и приятно использовать ее в качестве испытательного стенда для Linux с помощью знакомых инструментов.

4
ответ дан 8 December 2019 в 02:02
поделиться

Have a look at the QT Library and tools

5
ответ дан 8 December 2019 в 02:02
поделиться

Технически вы можете написать большой объем кода, который будет работать с очень небольшими изменениями на разных платформах Windows и Linux.

Однако в некоторых случаях возникают сложности. Часто проще перейти из linux -> windows, чем из windows -> linux, просто потому, что пользователи Windows склонны использовать вызовы Windows API, у которых нет эквивалентов Linux.

Если вы собираетесь использовать графический интерфейс, вы хотите попробовать использовать кроссплатформенный графический интерфейс. Qt или wxWidgets - хорошие варианты. Qt, в частности, также имеет много классов кроссплатформенных утилит, которые выходят за пределы пространства графического интерфейса и могут помочь с проблемами сокетов.

Если ваша цель действительно просто заставить его работать в Linux, а программное обеспечение не работает должны работать в Windows, я бы рекомендовал просто вскочить и попытаться заставить его работать там с самого начала.

7
ответ дан 8 December 2019 в 02:02
поделиться

Если вам нужно писать код в Windows, я бы рекомендовал использовать mingw / msys в качестве среды разработки. Msys реализует unix-подобную оболочку в Windows, а mingw является портом коллекции компиляторов GNU (gcc) и других инструментов сборки GNU на платформу Windows. Это проект с открытым исходным кодом, который хорошо подходит для этой задачи.

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

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

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