Closed antoniox closed 10 years ago
@antoniox Какая версия zeromq и zeromq-devel стоит на trusty (где все ок)?
Стоят пакеты libzmq3-dev:amd64 и libzmq3:amd64 версии 4.0.4+dfsg-2.
А ты под какой системой собираешься?
Fedora 19. У меня стоит версия 3.2.4 (zeromq3 и zeromq3-devel). Там нет файла /usr/include/zmq.hpp, и поэтому ничего не собирается. Версии поновее (4.x) в стандартных репозиториях нету (точнее, я не нашел). Поэтому хочется получить ответ на вопрос: какая минимальная версия ZeroMQ нужна? Если 4.0.4, тогда надо понять, откуда ее брать для многих систем (как вариант, ручками собирать из tarball'а с оф. сайта).
Если нужны более детальные комментарии того, что не получилось - дай знать.
Я использовал ZeroMQ 4.0.4, и под Windows и под Ubuntu. Скрипт для установки под ubuntu есть вот в этом makefile: https://github.com/sashafrey/topicmod/blob/master/3rdparty/Makefile
2014-06-23 11:41 GMT+02:00 Nikita Shapovalov notifications@github.com:
Fedora 19. У меня стоит версия 3.2.4 (zeromq3 и zeromq3-devel). Там нет файла /usr/include/zmq.hpp, и поэтому ничего не собирается. Версии поновее (4.x) в стандартных репозиториях нету (точнее, я не нашел). Поэтому хочется получить ответ на вопрос: какая минимальная версия ZeroMQ нужна? Если 4.0.4, тогда надо понять, откуда ее брать для многих систем (как вариант, ручками собирать из tarball'а с оф. сайта).
Если нужны более детальные комментарии того, что не получилось - дай знать.
— Reply to this email directly or view it on GitHub https://github.com/sashafrey/topicmod/pull/66#issuecomment-46824140.
@sashafrey @antoniox Сразу прошу прощения за столь большой шум вокруг сборки под Linux) 1) Спасибо за предоставленную информацию, библиотека libzmq замечательно собралась.Только вот собранные пакеты с zeromq-devel (libzmq3-dev и т.д.) версии 4.x есть только для ubuntu и opensuse, а архив с оф. сайта, который скачивается при запуске скрипта из makefile, к сожалению, не содержит zmq.hpp. Видимо, в связи с этим разработчики rpcz заботливо положили в свою папку /include файл zmq.hpp. Поэтому, мне кажется, неправильно удалять его из проекта (тем более, он практически идентичен файлу zmq.hpp, предоставляемому пакетом libzmq3-dev 4.0.4+dfsg-2, который, скорее всего, лежит в /usr/include) 2) Если все-таки не убирать файл 3rdparty/rpcz/include/zmq.hpp, то необходимо понять, как запускать cmake. Лично у меня все заработало с такой командой: "export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:${PKG_CONFIG_PATH}; cmake -DZEROMQ_ROOT={path_to_topicmod}/3rdparty/rpcz {path_to_topicmod}"
@sashafrey @vuvko @JeanPaulShapo Очередная правка ветки, утяните плз и проверьте, что теперь у вас все собирается)
Из внешних зависимостей оставил только boost, все остальное положил в 3rdparty.
zmq.hpp действительно в некий момент уехал в другой репозиторий, утянул его.
В итоге взял
После чего поправил, чтобы в нашу сборку все укладывалось)
Теперь попробую убедиться, что с Windows изменения совместимы - не уверен, что старого солюшена хватит, много всего изменилось.
@antoniox Все собралось! Отмечу, что glog со сборкой cmake в обязательном пордядке требует наличия gflags (скачал из репозитория с помощью команды yum install gflags gflags-devel, Fedora 19). Надеюсь, этот пакет есть во всех дистрибутивах.
@JeanPaulShapo Да, действительно, не заметил)
@sashafrey Есть хорошие новости со сборкой под Windows - по крайней мере, cmake с указанием путей до буста выдает проект.
Правда, MSVC Express 12 упорно воспринимается cmake как MSVC11 (хотя, может быть, компилятор там такой и стоит). Поэтому буст потребовалось качать под 11, 12й не находит(
При сборке же не находит некоторые заголовочные - пока не доразобрался, чего ему не хватает. Зато все протобуф файлики генерирует на лету, что не может не радовать)
@antoniox Супер! :)
@antoniox Я взял последнюю версию antoniox_cmake и собрал с все 3rdparty, libARTM.so и cpp_client помощью CMake под Ubuntu. Просо супер что ОНО работает! :) Открытые вопросы:
Я буду рад подключиться и помочь с какими-то проблемами из этого списка. Можно созвониться по skype и обсудить план действий :)
@sashafrey =)
Ответы)
ldd cpp_client
- увидишь, какие динамические библиотеки нужны бинарнику и откуда они берутсяmkdir build
cd build
cmake -DBOOST_LIBRARYDIR="C:/local/boost_1_55_0/lib32... (там одна папка такая)" -DBOOST_INCLUDEDIR="C:/local/boost_1_55_0" ..
и все собирается)
Наверное, бустовые переменные для Windows пропишу в CMakeLists.txt, чтобы можно было их не указывать все время. Все равно бустовые библиотеки при запуске ставятся в одно и то же место.
Я понял почему у меня проблемы - я собирал boost у себя ("bootstrap.bat" & b2), а оказалось проще скачать вот уже собранный boost: http://sourceforge.net/projects/boost/files/boost-binaries/1.55.0-build2/ Теперь и у меня под Windows CMake сгенерировал vs-проекты.
protobuf и zeromq собрались! При сборке glog нужно добавить #define _VARIADIC_MAX 10, иначе visual studio глючит. rpcz пока не собирается.
Для glog нашел более правильное решение - http://code.google.com/p/googletest/issues/detail?id=412#c11, добавляю на самом верхнем уровне.
У меня на текущий момент собирается
Смотрю на glog, он какие-то ошибки выдает.
@sashafrey В итоге, сейчас собирается "из коробки" ARTM + cpp_client и запускается (без указания PATH, единственная свободная зависимость - буст - подкладывается в bin/BUILD_TYPE, т.е. рядышком к исполняемому файлу), только есть следующие проблемы:
Посторонние проекты могут не собираться, с текущей веткой пока не сливался (хочу чуть ближе к вечеру попробовать), rpcz файлики не научился генерировать(
Просто прорва времени уходит с Windows на то, чтобы правильно слинковаться, т.к. везде в заголовках различные схемы переключения между dllimport/dllexport (какой-то интересный костыль для MSVC линкера, забавно, что в линуксе все срастается само собой))
Поправил по ходу у нас интерфейс немного, не везде были DLL_PUBLIC, вот.
Супер!! Вечером попробую на своем компьютере и скажу, как прошло)
dllimport/dllexport Ну, по-моему это полезный костыль) Он позволяет сказать, что экспортировать из .dll, а что нет. Аналогичная фишка есть и в C# (public vs internal http://stackoverflow.com/questions/4182015/internal-vs-public-in-c-sharp). Но из-за этих dllimport/dllexport текущий вариант сборки (в master) чуть-чуть различается в Windows и Linux. В Windows тесты линкуются статически c libartm.lib, а cppclient использует artm.dll. В Linux такого разделения нет - и тесты, и cppclient используют libartm.so (т.е. линкуются не статически, а динамически).
_>Поправил по ходу у нас интерфейс немного, не везде были DLLPUBLIC Ага, но это было сознательно) Если добавить DLL_PUBLIC к классам из cpp_interface.cc то нужно экспортировать и protobuf-сообщения. Это вроде бы как можно, но "легко" этого добиться не получилось и я решил просто не компилироваьт cpp_interface.cc в artm.dll. Вместо этого cpp_interface.cc компилируется вместе с тестами и cpp_client. Так было только под Windows; в Linux cpp_interface компилировался в libartm.so. Нужно ли включать cpp_interface.cc в artm.dll - это вопрос спорный. Я, наверное, даже чуть-чуть против) Два аргумента:
2014-07-21 13:56 GMT+02:00 AntonioX notifications@github.com:
@sashafrey https://github.com/sashafrey В итоге, сейчас собирается "из коробки" ARTM + cpp_client и запускается (без указания PATH, единственная свободная зависимость - буст - подкладывается в bin/BUILD_TYPE, т.е. рядышком к исполняемому файлу), только есть следующие проблемы:
- временно выключил логгирование (закомментил все разумное в src/artm/c_interface.cc:EnableLogging), т.к. линковка с gflags каким-то образом протухла..
- все собирается только под Release - не разобрался, как при изменении типа сборки в MSVC перегенерировать проект (в cmake от этого пути зависят)
Посторонние проекты могут не собираться, с текущей веткой пока не сливался (хочу чуть ближе к вечеру попробовать), rpcz файлики не научился генерировать(
Просто прорва времени уходит с Windows на то, чтобы правильно слинковаться, т.к. везде в заголовках различные схемы переключения между dllimport/dllexport (какой-то интересный костыль для MSVC линкера, забавно, что в линуксе все срастается само собой))
Поправил по ходу у нас интерфейс немного, не везде были DLL_PUBLIC, вот.
— Reply to this email directly or view it on GitHub https://github.com/sashafrey/topicmod/pull/66#issuecomment-49596803.
Ну, по-моему это полезный костыль) Он позволяет сказать, что экспортировать из .dll, а что нет. Аналогичная фишка есть и в C# (public vs internal <http://stackoverflow.com/questions/4182015/internal-vs-public-in-c-sharp>).
Часть проблем возникает и из-за того, что при экспорте объекта все ок, а при импорте зачем-то это нужно явно писать.. Казалось бы, линковщик же и занимается тем, что ищет соотв. символы. Зачем ему еще пометки такие?(
Но из-за этих dllimport/dllexport текущий вариант сборки (в master) чуть-чуть различается в Windows и Linux. В Windows тесты линкуются статически c libartm.lib, а cppclient использует artm.dll. В Linux такого разделения нет - и тесты, и cppclient используют libartm.so (т.е. линкуются не статически, а динамически).
Пытался этого избежать, но как-то не особо получается.. Первоначальная попытка "сделать все SHARED" с треском проваливается..
Саш, а скажи, какие у тебя проблемы возникали с линковкой, почему тесты только статикой шли?
Ага, но это было сознательно) Если добавить DLL_PUBLIC к классам из cpp_interface.cc то нужно экспортировать и protobuf-сообщения. Это вроде бы как можно, но "легко" этого добиться не получилось и я решил просто не компилироваьт cpp_interface.cc в artm.dll. Вместо этого cpp_interface.cc компилируется вместе с тестами и cpp_client. Так было только под Windows; в Linux cpp_interface компилировался в libartm.so.
Я вот тут пошел напролом (https://groups.google.com/forum/#!topic/protobuf/PDR1bqRazts), поэтому пришлось и DLL_PUBLIC добавлять.
Да, наверное, стоит тогда вынести в отдельный заголовок все.
Да, на твоей виртуалке все собирается (и текущий проект собран уже), нужно только gz файлики разжать, задать command line и пользоваться)
Closed because a clone of this pull request had been merged to master.
@vuvko @sashafrey Убрал из сборки .pb. файлы, собрал все *.proto вместе.
Проверил у себя на trusty - все ок. А на Windows все еще сборка не идет?