Написание C / C ++ с Unix Api в Visual Studio? - PullRequest
0 голосов
/ 14 марта 2011

Я студент третьего курса по информатике. Я вырос на Visual C ++ и стал достаточно опытным в его использовании. Моя школа, однако, преподает в основном на платформах Linux. До сих пор я только программировал и отлаживал в Visual studio, затем, когда я был уверен, что все работает, я перекомпилировал исходный код в Linux, чтобы убедиться, что он работает там.

Теперь, однако, теперь мои проекты требуют использования вызовов Unix API, сокетов Berkly и иногда pthreads.

Существуют ли библиотеки, которые дают мне доступ к Unix API в Windows? Если да, то как мне использовать их Visual C ++ 2010?

Я действительно не хочу использовать Gedit и Gdb для отладки сложного (по крайней мере, для меня) кода.

Ответы [ 5 ]

1 голос
/ 14 марта 2011

Вы можете попробовать что-то вроде Cygwin для предоставления Unix API в Windows, создать и скомпилировать его там, а затем внести любые незначительные изменения в использование собственного API при переходе на Linux.

Вы также можете проверить каждую библиотеку, чтобы увидеть, доступна ли версия для Windows. Если на сайте lib нет версии Win, зайдите в Google и посмотрите, создал ли кто-то ее для Windows; это может предоставить вам полезную версию.

Если вам не нужен Unix API, лучше всего подойдет Boost или другая кроссплатформенная библиотека для предоставления необходимых функций.

Для разработки, не относящейся к Windows, поиск замены VS, вероятно, является хорошей идеей (к сожалению, на самом деле не существует IDE, которая может сравниваться, IMO). Code :: Blocks является ближайшим, но все еще не хватает многих функций. KDevelop был рекомендован мне несколько раз, на первый взгляд кажется приятным. Eclipse, пожалуй, единственная IDE, более медленная, чем VS2010, что следует учитывать перед ее использованием.

1 голос
/ 14 марта 2011

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

0 голосов
/ 01 июня 2011

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

Единственное, о чем я могу думать, - это использовать препроцессор.

   #ifdef __unix__
   ...UNIX code here
   #endif

и написать код UNIX в блоке, чтобы вы могли скомпилировать его в системе UNIX.требуется.Затем, вне этих блоков, вы можете использовать аналоги WIN32 внутри аналогичного блока

  #ifdef _WIN32
  ...Windows code here
  #endif

, так что конечный результат может выглядеть как

 //Cross platform includes
 //cross platform namespaces
 #ifdef _WIN32
    //Windows includes
    //Windows namespaces  
 #else
    //unix includes
    //unix namespaces
 #endif

 int main()
 {
  DoCrossPlatformFunctions();

  #ifdef _WIN32
   DoWindowsFunctions();
  #else
   DoUnixFunctions();
  #endif

  DoMoreXplatformStuff();
  return 0;
 }

Вы могли бы сделать небольшое исследование и найтиАналоги функций, которые вам требуются, довольно легко и тогда будут на вашем пути.Это немного громоздко, но, поскольку у вас, кажется, есть вендетта против того, чтобы просто записать его на виртуальную машину UNIX, это, вероятно, лучший вариант.Самое приятное, что вам не нужно выходить за пределы зоны комфорта Visual C ++, чтобы сделать это.Надеюсь, это поможет !!

0 голосов
/ 14 марта 2011

Либо переключитесь на Code :: blocks, либо переключитесь на Eclipse - оба мультиплатформенные. Я могу засвидетельствовать, что Eclipse 3.6 прекрасно работает при отладке приложений C ++ Qt в Linux и Windows.

0 голосов
/ 14 марта 2011

Большинство API только для Unix недоступны для Windows. Я предлагаю вам перейти на Code :: blocks, который является кроссплатформенным. Он во многом похож на VC ++, и к нему легко привыкнуть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...