Разработка C++ на Linux - где я запускаю?

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

Сказав это, это проблема SQL, которая показана ниже. Но если вы полагаете, что это не слишком «программное обеспечение» (серьезно, я это слышал !!), то вы можете отсылать первое решение.

Решение 1:

def reshape(t):
    out = []
    out.append(t[0])
    out.append(t[1])
    for v in brc.value:
        if t[2] == v:
            out.append(t[3])
        else:
            out.append(0)
    return (out[0],out[1]),(out[2],out[3],out[4],out[5])
def cntryFilter(t):
    if t[2] in brc.value:
        return t
    else:
        pass

def addtup(t1,t2):
    j=()
    for k,v in enumerate(t1):
        j=j+(t1[k]+t2[k],)
    return j

def seq(tIntrm,tNext):
    return addtup(tIntrm,tNext)

def comb(tP,tF):
    return addtup(tP,tF)


countries = ['CA', 'UK', 'US', 'XX']
brc = sc.broadcast(countries)
reshaped = calls.filter(cntryFilter).map(reshape)
pivot = reshaped.aggregateByKey((0,0,0,0),seq,comb,1)
for i in pivot.collect():
    print i

Теперь решение 2: Конечно, лучше, поскольку SQL является правильным инструментом для этого

callRow = calls.map(lambda t:   

Row(userid=t[0],age=int(t[1]),country=t[2],nbrCalls=t[3]))
callsDF = ssc.createDataFrame(callRow)
callsDF.printSchema()
callsDF.registerTempTable("calls")
res = ssc.sql("select userid,age,max(ca),max(uk),max(us),max(xx)\
                    from (select userid,age,\
                                  case when country='CA' then nbrCalls else 0 end ca,\
                                  case when country='UK' then nbrCalls else 0 end uk,\
                                  case when country='US' then nbrCalls else 0 end us,\
                                  case when country='XX' then nbrCalls else 0 end xx \
                             from calls) x \
                     group by userid,age")
res.show()

данных:

data=[('X01',41,'US',3),('X01',41,'UK',1),('X01',41,'CA',2),('X02',72,'US',4),('X02',72,'UK',6),('X02',72,'CA',7),('X02',72,'XX',8)]
 calls = sc.parallelize(data,1)
countries = ['CA', 'UK', 'US', 'XX']

Результат:

Из 1-го решения

(('X02', 72), (7, 6, 4, 8)) 
(('X01', 41), (2, 1, 3, 0))

Из второго решения:

root  |-- age: long (nullable = true)  
      |-- country: string (nullable = true)  
      |-- nbrCalls: long (nullable = true)  
      |-- userid: string (nullable = true)

userid age ca uk us xx 
 X02    72  7  6  4  8  
 X01    41  2  1  3  0

Пожалуйста, дайте мне знать, если это работает, или нет:)

Best Ayan

33
задан Daniel Sloof 8 March 2009 в 04:38
поделиться

12 ответов

, Чему рекомендуют руководства по созданию make-файла, как я компилирую от этого make-файла (я называю g ++ сам, я использую, 'делают'?)

Вы создаете из make-файла вызовом, "делают". И в Вашем make-файле, Вы компилируете и связываете использование g ++ и ld.

Рассмотрение другого программного обеспечения Linux, у них почти всегда, кажется, есть 'настраивать' файл. Что точно это делает? Это только проверяет, установлены ли необходимые библиотеки, или он больше, чем просто проверка требований?

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

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

ld является компоновщиком GNU. Можно вызвать его отдельно (который является тем, что большинство make-файлов закончит тем, что делало), или у Вас может быть g ++ делегат в нем. Опции, которые Вы передаете g ++ и ld, определяют, где искать включенные заголовки, библиотеки для соединения, и как произвести результат.

Рекомендации для редакторов кода? Я в настоящее время использую нано, и я услышал об энергии и emacs, но не знаю то, что преимущества их друг по другу. Есть ли какие-либо другие, и почему я рассмотрел бы их по какому-либо из предыдущих трех?Примечание: Я не ищу IDE.

Vim и Emacs являются очень гибкими редакторами, которые поддерживают целый набор различных использований. Используйте любые чувства лучше всего для Вас, хотя я предположил бы, что Вы могли бы хотеть несколько минимальных вещей как подсветка синтаксиса.

22
ответ дан 27 November 2019 в 18:08
поделиться

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

env = Environment()
env.Append(CCFLAGS='-Wall')
env.Append(CPPPATH = ['./include/'])

env.MergeFlags('-ljpeg')
env.ParseConfig("sdl-config --cflags --libs")
env.ParseConfig("curl-config --cflags --libs")
env.ParseConfig("pkg-config cairo --cflags --libs")

env.Program('rovio-pilot', Glob('./src/*.cpp'))

. Как текстовый редактор, я доволен JEdit для кодирования, но это дело вкуса.

0
ответ дан 27 November 2019 в 18:08
поделиться

Как примечание стороны среди надлежащих ответов здесь.. В случае, если Вы хотите сразу взяться за дело как парень Windows, я предложил бы свежее новое SDK кварты. Будет похоже на домашний:-)

1
ответ дан 27 November 2019 в 18:08
поделиться

Для кого-то происходящего из Visual Studio, весь этот материал командной строки мог бы казаться тайным и грязным. Прежде чем Вы превратитесь в удар shell/vim/emacs наркоман, попробуйте несколько основанных на GUI инструментов сначала, таким образом, у Вас есть некоторое время перехода...

  • QT 4.5 с его спокойным мини-IDE Создателя. Это - лучшая платформа, световые годы перед конкуренцией.
  • Eclipse (C++) - На основе моего опыта с этим в Windows, я нахожу, что он изумляет (Это - вероятно, лучшее JAVA-приложение, когда-либо записанное)
  • KDevelop
  • Anjuta
  • при использовании Delphi Lazarus/FreePascal является хорошей альтернативой.

я уверен, что волосатые будут насмехаться и утверждать, что энергия или emacs дают им лучшую и самую быструю среду разработки, но особый подход к каждому. Кто-то приученный к IDE будет не торопиться для переключения или не может хотеть переключаться вообще. Для всего их мастерства редактирования создание приложений для GUI является, конечно, не заданием для 80x25 инструменты. Требуются годы для становления экспертом со стороной командной строки вещей, ее больше преобразования мировоззрения, чем что-либо еще.

2
ответ дан 27 November 2019 в 18:08
поделиться

Рекомендации для редакторов кода? Я в настоящее время использую нано, и я услышал об энергии и emacs, но не знаю то, что преимущества их друг по другу. Есть ли какие-либо другие, и почему я рассмотрел бы их по какому-либо из предыдущих трех?Примечание: Я не ищу IDE.

Vi и Emacs являются двумя наиболее существенными редакторами Unix; если Вы установлены при использовании текстового редактора, а не IDE, один из них или их производных (энергия, xemacs, и т.д.) является способом пойти. Обе подсветки синтаксиса поддержки и все виды функций, или по умолчанию или через расширения. Большая часть об этих редакторах является расширяемостью, которую они предлагают; emacs через разнообразие шепелявости и энергия через ее собственный язык сценариев.

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

РЕДАКТИРОВАНИЕ [декабрь 2014]: кажется, существует тенденция межплатформенных и очень растяжимых редакторов недавно. Это могло быть хорошим выбором, если Вы хотели бы что-то меньшее чем IDE, но более графический, чем vi/emacs и собственное чувство через несколько платформ. Я рекомендую смотреть Сублимат или Atom ; оба из них работают через Windows/Linux/Mac и имеют великие сообщества плагинов и тем.

3
ответ дан 27 November 2019 в 18:08
поделиться

пространство между вызовом g ++ непосредственно и использованием цепочка сборки автоинструментов является довольно узким. Станьте хорошими в автоинструментах, который является действительно самой близкой вещью к 'проекту', доступному в мире Linux/Открытого исходного кода.

2
ответ дан 27 November 2019 в 18:08
поделиться
  • Рекомендации для редакторов кода? Я в настоящее время использую нано, и я услышал об энергии и emacs, но не знаю то, что преимущества их друг по другу. Есть ли какие-либо другие, и почему я рассмотрел бы их по какому-либо из предыдущих трех?Примечание: Я не ищу IDE.

при использовании Linux с менеджером окон (KDE, Gnome, и т.д.) Вы могли также рассмотреть использование стандартного текстового редактора для своего менеджера окон. Основное преимущество, которым это обладало бы по vim/emacs/nano, - то, что это казалось бы более знакомым одному прибытию из среды Windows - у редактора, записанного для работы менеджера окон, есть строка меню, файл открываются/сохраняют диалоговые окна, отмену/восстановление и много других аккуратных функций, которым, вероятно, не могут соответствовать консольные редакторы. (Хотя emacs и энергия довольно сложны в эти дни, поэтому кто знает;-P)

На KDE (который является тем, что я использую) я могу рекомендовать KWrite, который является хорошо показанным, но довольно основным текстовым редактором с подсветкой синтаксиса; или Kate, которая является более необычным текстовым редактором с некоторыми дополнительными функциями: управление сеансами, встроенная терминальная панель, автоматический вызов make, и несколько плагинов включая средство просмотра символа C/C++. Я обычно использую Kate для своей работы C++, когда я не хочу беспокоиться установкой полного проекта IDE. (К вашему сведению IDE для KDE является KDevelop)

3
ответ дан 27 November 2019 в 18:08
поделиться

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

И что касается IDE, я использую затмение обычно, потому что оно обрабатывает make-файл также. Не говоря уже о компиляции и стандартном выводе являются правильными под рукой в программе.
Это было главным образом предназначено для разработки Java, но также существует плагин C/C++!

4
ответ дан 27 November 2019 в 18:08
поделиться

Ваш вопрос является немного слишком общим, но здесь - то, что я повторно прокомментировал бы:

  • Редактор: энергия и emacs популярны. То, что имеет значение больше всего, как с большинством инструментов, должно освоить тот. Мне нравится использовать энергию, потому что vi (его потомок) доступен везде, но это не может быть очень релевантно, особенно если Вы остаетесь на Linux. Любой редактор программирования в порядке.

  • настройте: если Вы не делаете большие проекты, не беспокойтесь им. Это - кошмар, чтобы использовать и отладить. Это только имеет смысл, если Вы намереваетесь распределить свой проект - в этом случае, прочитайте автокнигу: http://sources.redhat.com/autobook/ . Как другой сказанный, существуют альтернативы (cmake, сканирования, и т.д....). Я довольно знаком и со сканированиями и с автоинструментами, но я все еще использую, делают для маленького (несколько файлов) проекты.

Относительно общей библиотеки: это почти как окна, за исключением того, что Вы связываетесь против общей библиотеки непосредственно - нет никакого .lib по сравнению с .dll различием в Linux. Например. для одного нечто библиотеки с функциональным нечто:

int foo(void)
{
     return 1;
}

Вы создали бы его следующим образом:

gcc -fPIC -c foo.c -o foo.o
gcc -shared foo.o -o libfoo.so

основной А (конечно, в реальной жизни Вы помещаете API в заголовочный файл):

int foo(void);

int main(void)
{
    foo();
    return 0;
}

И затем, Вы связываете его как:

gcc -c main.c -o main.o
gcc main.o -o main -L. -lfoo 

-L. здесь, чтобы сказать, что Вы хотите, чтобы компоновщик посмотрел в текущем каталоге (вопреки окнам, это никогда не делается по умолчанию в Linux),-lfoo говорит для соединения против нечто библиотеки.

4
ответ дан 27 November 2019 в 18:08
поделиться

, Чему рекомендуют руководства по созданию make-файла, как я компилирую от этого make-файла (я называю g ++ сам, я использую, 'делают'?)

я изучил, как записать make-файлы путем чтения , GNU Делает руководство .

, Смотрящее на другое программное обеспечение Linux, у них почти всегда, кажется, есть 'настраивать' файл. Что точно это делает? Это только проверяет, установлены ли необходимые библиотеки, или он больше, чем просто проверка требований?

файл конфигурации обычно связывается с автоинструменты . Как название сценария предполагает, это позволяет Вам настраивать программное обеспечение. С точки зрения разработчика это главным образом означает устанавливать макросы, которые определяют переменные, какие библиотеки доступны, и такой. Это также тестирует на доступность библиотек. В конце сценарий генерирует Make-файл GNU, который можно тогда использовать для на самом деле сборки и установить программное обеспечение.

система сборки GNU является только одним из многих. Мне особенно не нравится система сборки GNU, поскольку она имеет тенденцию быть медленнее, чем другие и генерирует ужасный Make-файл. Некоторые более популярные - CMake, Затор (, Затор Повышения мог бы быть представляющим интерес для C++), и waf. Некоторые системы сборки просто генерируют Make-файлы, в то время как другие обеспечивают абсолютно новую систему сборки. Для простых проектов, пишущий Make-файл вручную была бы легкая, но "проверка зависимости" (для библиотек, и т.д.) должен будет также быть сделан вручную.

Редактирование: Brian Gianforcaro также указал на это.

7
ответ дан 27 November 2019 в 18:08
поделиться

Просто примечание для движения с ответами MandyK.

make-файлы Создания вручную обычно очень непортативный способ создать через варианты дистрибутива/Unix Linux. Существует много систем сборки для автоматических генерирующихся make-файлов, создающих без make-файлов. Автоинструменты GNU , Cmake, Scons, затор , и т.д.

Также для движения больше подробно о настраивают.

  • Проверки доступные компиляторы, библиотеки, архитектура системы.
  • Удостоверяется, что Ваша система соответствует соответствующему совместимому списку пакета.
  • Позволяет Вам определить параметры командной строки для специализации сборки, пути установки, пакеты опции и т.д.
  • Настраивают, тогда генерирует соответствующий Make-файл, характерный для системы.
14
ответ дан 27 November 2019 в 18:08
поделиться

Я рекомендую книге Искусство Программирования Unix ESR. Это покрывает выбор редактора, языка программирования, и т.д. Это также дает здравый смысл для мышления позади программирования на Unix или Linux.

Для редакторов, Вы, вероятно, хотите или Vim или Emacs. Они и отличаются и какой лучше, больше о персональном вкусе, чем что-либо еще. Я использую Vim. Это является большим для того, чтобы быстро переместить код и внести изменения. Мне не нравился Emacs так же, но многие люди делают. Emacs чрезвычайно расширяем и может использоваться для всего от читателя новостей язю. Попробуйте обоих и посмотрите то, что Вы любите.

3
ответ дан 27 November 2019 в 18:08
поделиться
Другие вопросы по тегам:

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