Я потерялся в библиотеках повышения (в частности, boost_program_options)

Привет всем, я уже весь день бьюсь головой о стену.

Итак, я хочу перенести свою программу на университетский суперкомпьютер, но у него нет boost (и я использовал boost program_options в своем коде). На моем компьютере у меня просто есть -lboost_program_options, и это работает нормально, но, очевидно, больше не будет работать.

Итак, мне нужно упаковать необходимые вещи вместе с моим кодом, чтобы он скомпилировался на суперкомпьютере (используя Intel icpc)

Моим первым препятствием была компиляция строки в моем make-файле с кодом, который хотел включить заголовок boost, но я выполнил следующее в своей папке с кодом:

bcp --scan --boost=/usr/include/ main.cpp destination_folder/

И поместите полученные файлы в мой каталог include. который решил это.

Параметры программы Boost, к сожалению, не являются пакетом только для заголовка, поэтому мне нужно что-то еще. Мне нужна библиотека или что-то в этом роде. Потому что я получаю ошибки, когда компилятор доходит до последней задачи в моем make-файле (выполняет все объектные файлы)

В своих путешествиях я нашел этот вопрос:

extractin/Building Boost program_options

Я попробовал то, что предлагает ответ, но установка «сборки» в моей команде не создает никаких дополнительных файлов …

Теперь полностью застрял, не знаю, как получить эту библиотеку. Я столько всего прочитала о bjam, что у меня голова идет кругом, у меня просто не хватает понимания, чтобы обработать все это в голове.

ОС: Linux обе системы


person CptLightning    schedule 26.09.2011    source источник


Ответы (3)


Один из вариантов — построить Boost на этой машине. Установите его у себя дома. Измените свои CXXFLAGS и LDDFLAGS, чтобы они указывали на правильные каталоги заголовков и библиотек, и создайте свой код там. Другой вариант - кросс-компилировать оба на вашем ПК (если у вас есть такая кросс-инструментальная цепочка). Статически свяжите свой код, чтобы ускорить и перенести окончательный двоичный файл на суперкомпьютер.

person long404    schedule 26.09.2011
comment
Хорошо, спасибо, я скачал буст, перенес его в СЦ, собрал там и скомпилил статически. У меня есть сборка! Это кажется таким простым, может быть, сегодня моя голова была более ясной. - person CptLightning; 27.09.2011

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

Я собирал boost из bjam для кросс-компиляции в windows, и если когда-либо и была причина использовать автоинструменты в проекте, так это беспорядок из boost и bjam. Избегайте этого, если это возможно, и попытайтесь адаптировать исходный код пакета debian, если не можете.

person thiton    schedule 26.09.2011
comment
+1 Я предполагаю, что ему понадобятся дополнительные оптимизации, которые может предложить компилятор Intel, когда там будет собран код. gcc-4.4 очень близок к скорости, которую может предложить icc, но все еще отстает (по крайней мере, на Intel Xeon). - person long404; 27.09.2011
comment
@thiton, я не очень понимаю несколько вещей, извините. Я не знаю, работают ли они на одном процессоре или нет. Я знаю, что мне нужно скомпилировать с помощью Intel на суперкомпьютере, но у меня есть g++ на моем компьютере с Linux. Я не знаю, как копировать двоичные файлы из пакета debian (вы имеете в виду пакет program_options?). Я думаю, что это последняя часть моей основной проблемы. - person CptLightning; 27.09.2011
comment
@ long404, вы правы в том, что я должен использовать компилятор Intel (я предполагаю, что они хотят, чтобы программы были более оптимизированы, чтобы они занимали меньше времени, освобождая систему для других пользователей). см. комментарий выше для получения дополнительных разъяснений о моих проблемах - person CptLightning; 27.09.2011
comment
@CptLightning: Когда вам нужно строить с помощью icc, ну, это очень плохо - извините, я мало что знаю об этом. Копировать двоичные файлы означает, что вы устанавливаете пакет и просто копируете /usr/lib/libboost_program_options.so со своего компьютера. В конце концов, параметры программы, надеюсь, не критичны для производительности, но я предполагаю, что icc имеет несовместимое изменение имени с gcc. - person thiton; 27.09.2011
comment
Вам нужна оптимизация, которую может предложить icc, или вам просто нужен ваш код для работы там? - person long404; 27.09.2011
comment
@thiton копировать и компилировать их было бы занозой в заднице, если бы он мало знал о связях. - person long404; 27.09.2011
comment
@CptLightning: у icc есть пробная версия, которую вы можете скачать. Создайте свой код на своем компьютере с помощью icc (связывая статически с boost_program_options), а затем просто загрузите двоичные файлы на этот uni-компьютер. Они должны быть бинарно-совместимыми, если вы связываете все статически (ldd your_binary не показывает никаких зависимостей). - person long404; 27.09.2011
comment
@ long404, я не думаю, что смогу связать все статически. Я использую openmp, и я не мог заставить его работать статически. - person CptLightning; 27.09.2011
comment
@thiton, я пытался скопировать свой libboost_program_options.so (также пробовал .a), но получаю сообщения типа: ....so: неопределенная ссылка на 'ZSt16.....и т.д... - person CptLightning; 27.09.2011
comment
@CptLightning: Да, это несовместимое изменение имени. Ну так за то, что бям потерпеть придется. Удачи. - person thiton; 27.09.2011
comment
@thiton: ты не можешь заставить тех, кто управляет этими машинами, установить там boost? Boost настолько популярен, используйте этот аргумент. Прочитайте мой пост ниже. еще два варианта: компиляция boost на этом суперкомпьютере или (вероятно, сложнее) кросс-компиляция как boost, так и вашего кода. Кстати: вам не нужно статически компилировать библиотеки, доступные на этой машине, если версии на обеих машинах совпадают. - person long404; 27.09.2011

Вместо сборки Boost.ProgramOptions вы можете включить и скомпилировать все его файлы .cpp в свой проект.

person K-ballo    schedule 26.09.2011
comment
во-первых, я не знаю, где находятся соответствующие файлы cpp. Я вижу файлы .so и .a в /usr/lib и файлы hpp в /usr/local/ .... - person CptLightning; 27.09.2011
comment
Они не должны присутствовать в вашей системе. Загрузите исходники с веб-сайта, соответствующие файлы cpp находятся по адресу ./boost_1_47_0/libs/program_options/src, обратите внимание, что некоторые из них предназначены для Windows. - person K-ballo; 27.09.2011