Как создать библиотеку Google C libphonenumber для Win32

#c #windows #boost #build #cmake

#c #Windows #boost #сборка #cmake

Вопрос:

Некоторые разработчики из нашей команды используют Java и C # версии libphonenumber, библиотеки нормализации международных телефонных номеров.

Они утверждают, что это замечательно / волшебно / и т. Д.

К сожалению, будучи разработчиком Win32 C , мой простой ум не может полностью понять все чудеса и магию CMake, boost и множества других библиотек, и я вообще не могу создать библиотеку.

Может ли кто-нибудь предоставить несколько подсказок или URL-адресов, которые помогут мне указать правильное направление, чтобы мы могли создать этот проект и использовать его?

Текущий камень преткновения возникает при попытке запустить CMake (следуя инструкциям в очень коротком readme) Я получаю следующее сообщение об ошибке:

 > -- Could NOT find Boost
> -- Configuring incomplete, errors occurred!
  

Я думал, что правильно установил BOOST_ROOT, но, видимо, либо я установил это неправильно, либо мне не хватает других переменных env.

Как я могу создать эту библиотеку?

Мы используем VS 2008, но у меня также есть VS 2010 на моей машине. Я был бы рад получить сборку с любым из них.

Комментарии:

1. Доступно ли это даже на C , я думал, что это Java, только JavaScript?

2. @Justin — code.google.com/p/libphonenumber — проблема в том, что инструменты и документация для C (особенно для win32) отсутствуют / ужасны)

3. Для этого требуется: Boost (поток) — вы должны скомпилировать поток boost, буферы протокола, Google Test и libIcu. Это не тривиальная задача.

4. Хм, я знаю, что должен их создать. И я знаю, что это не тривиально — отсюда и вопрос. Вопрос в ТОМ, КАК построить. Материал CMake бесполезен и не работает.

Ответ №1:

Возможно, ваш CMake устарел по сравнению с установленной вами версией Boost. Проверьте файл FindBoost.cmake, расположенный в каталоге CMake Modules. Она должна содержать раздел, подобный этому:

 set(_Boost_KNOWN_VERSIONS ${Boost_ADDITIONAL_VERSIONS}
    "1.46.1" "1.47" "1.47.0"
    "1.46.0" "1.46" "1.45.0" "1.45" "1.44.0" "1.44" "1.43.0" "1.43" "1.42.0" "1.42"
    "1.41.0" "1.41" "1.40.0" "1.40" "1.39.0" "1.39" "1.38.0" "1.38" "1.37.0" "1.37"
    "1.36.1" "1.36.0" "1.36" "1.35.1" "1.35.0" "1.35" "1.34.1" "1.34.0"
    "1.34" "1.33.1" "1.33.0" "1.33")
  

Комментарии:

1. Спасибо. Я добавил 1.47 и 1.47.0. К сожалению, это, похоже, не исправляет проблему. Как cmake узнает, где искать boost? Я попытался установить boost_root, но, очевидно, я делаю что-то не так…

2. Вы перешли -DBOOST_ROOT=<your boost path here> к компилятору?

Ответ №2:

Вы можете попробовать передать BOOST_INCLUDEDIR и BOOST_LIBRARYDIR компилятору; таким образом, вы можете полностью обойти поиск по модулю cmake.

Ответ №3:

  1. Измените Boost_ADDITIONAL_VERSIONS в FindBoost.cmake, шаг, который вы уже сделали
  2. Измените CMakeLists.txt из libphonenumbercpp измените строку find_package (Boost 1.40.0 COMPONENTS thread)

в

  set(Boost_USE_STATIC_LIBS        ON)
 set(Boost_USE_MULTITHREADED      ON)
 set(Boost_USE_STATIC_RUNTIME    OFF) //since CMake 2.8.3
 find_package (Boost 1.47.0 COMPONENTS thread)
  

3. Запустите mkdir build в libphonenumber cpp, cd build
4. Запустите cmake -G «ваш генератор» -DBOOST_ROOT=»you_path_to_boost_147_0 папка», например: cmake -G "Visual Studio 10" ../ -DBOOST_ROOT="E:libphonenumbercpp3rdparty"

Комментарии:

1. ПРИМЕЧАНИЕ: буферы протокола не могут быть скомпилированы с VS 2010

2. У меня такая же проблема. Я пытаюсь скомпилировать библиотеку protobuf для Windows, используя VS2010, но это не удается. Есть ли другие способы? У меня также есть один вопрос: могу ли я скомпилировать библиотеку libphonenumber для Windows без использования boost???

Ответ №4:

Попробуйте скомпилировать ее с помощью cygwin, это похоже на стандартную среду сборки UNIX, но работает в Windows. Обычно с ее помощью намного проще компилировать библиотеки с открытым исходным кодом, чем с помощью Visual Studio.