libevent: как её прилинковать к проекту под Windows?
От: SteeLHeaD  
Дата: 14.02.18 12:46
Оценка:
Господа,
у меня серьезный и важный вопрос, над которым я бьюсь головой об клавиатуру уже больше недели.
Я даже готов обсудить вознаграждение тому, кто мне поможет.
Вопрос такой: надо меня научить правильно ставить галочки в настройках линкера под VS 2015, чтобы у меня библиотека libevent линковалась к проекту на c++ (и, возможно, правильно билдить эту библиотеку).

Предыстория вопроса:
я прочитал пару мотивирующитъх статей насчет библиотеки libevent
(напрмер, эту: https://habrahabr.ru/post/217437/ ).
Начал я с того, что сделал девелоперскую машину под Ubuntu 16 LTS,
куда поставл g++ и собрал библиотеку из исходников по иструкциям с гитхаба.
( https://github.com/libevent/libevent )
Потом я написал простую программу test.cpp, в которой попробовал инициализировать библиотеку:

#include <memory>
#include <cstdint>
#include <iostream>
#include <evhttp.h>
#include <string>
#include <fstream>

using namespace std;

int main(){

cout<< "Hi!" << endl ;

if ( !event_init()) 
  cout << "Failed to init libevent." << endl;
else
  cout << "libevent init successfully!" << endl;


return 0;
}


После небольшого замешательства я нормально собрал эту программу командой
g++ -std=c++11 -o test.ex  test.cpp -levent

и запустил её.
./test.ex

Всё работает. Это пркрасно.
Затем я переписал из примеров немного более сложный пример...
Но как только я начал писать сам — мне понадобилась отладка.
И родная для меня система в этом смысле — Windows.
Ну, вы понимаете... родственников не выбирают...

А под Windows все совсем не так гладко.
Во первых, нужно собрать библиотеку из исходников.
По инструкции я делаю это при помощи CMake:
"CMake (Windows)
Install CMake: http://www.cmake.org

 $ md build && cd build
 $ cmake -G "Visual Studio 10" ..   # Or whatever generator you want to use
 $ start libevent.sln"

Cmake при сборке ругается на отсутствие OpenSSL, и тут уже не помогают никакие танцы с бубнами:
чтобы использовать OpenSSL под виндой, надо определить три магические переменные окружения
OPENSSL_ROOT_DIR
OPENSSL_INCLUDE_DIR
OPENSSL_CRYPTO_LIBRARY

а как эти переменные определять — не написано нигде.
К счастью, если закрыта дверь — можно проверить окно...
libevent позволяет собрать себя без поддержки OpenSSL, дописыванием ключика -DEVENT__DISABLE_OPENSSL=on,
то есть командой
cmake -DEVENT__DISABLE_OPENSSL=on -G "Visual Studio 14 2015"

Меня, правда, немного смущают некоторые предупреждения, которые написала мне эта команда,
её вывод видно здесь:
  Pic0

Но *.sln файл создаётся, и после запуска компиляции я получил набор *.lib — файлов в директории Debug:
event.lib, event_core.lib, event_extra.lib.
  Pic1

А вот потом начались проблемы.
Никакие пляски с бубном не позволяют мне прилинковать эти библиотеки к C++ проекту.
Для полноты картины:
в моей системе путь к этим *.lib файлам — это C:\Programs\includes\libevent\lib\Debug
я засобывал их сюда:
  Pic2


и сюда:
  Pic3


и сюда:
  Pic4


и даже сюда:
  Pic5



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


Потом я сделал еще две жалкие попытки разобраться:
слинковать (потому что сборка obj-файла проходит без ошибок, заметьте) под виндой из командной строки (результат — тот же, не видит библиотеки)
  Pic7


и попробовать сравнить содержимой obj — файлов, воспользовавшись под линуксом утилитой nm, а под виндой — dumpbin с опцией /symbols
Но разница слишком велика, я просто вижу в виндовом оьбъектном файле, что символ _event_init — UNDEFined.
  Pic8


В общем, я не достиг успеха.
Помогите, пожалуйста, например — подсказав, как определить магические переменные для OpenSSL (может, библиотека толькоприкинулась, что она нормально собрана?),
или попробовав у себя собрать этот проект с этой библиотекой — возможно, у вас получится.

Заранее спасибо за советы.
libevent c++ visual studio linker openssl
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.