Poco ApplicationServer, связывающий проблемы с Eclipse и Mingw - PullRequest
0 голосов
/ 31 августа 2011

Я пытаюсь получить базовый пример ApplicationServer от poco working.Я использую:

Windows 7 MinGW Poco Eclipse c ++

Так что после множества взломов и настроек у меня в итоге все заработало.Но я не знаю, что сделали мои хаки, и я хочу правильное решение, а не мой хак.

Проблема, с которой я столкнулся, заключается в том, что она дает мне «неразрешенную ссылку на XX» при сборке,Они появляются из библиотек poco, они не являются тем, что я использую в своем коде.В моем файле Server.cpp мой хак состоял в том, чтобы пройти через все упомянутые классы и использовать их.Просто объявить их недостаточно, я должен фактически использовать объект.Как только я использовал все, на что он жаловался, он компилируется и запускается, как и ожидалось.Это похоже на поведение, которое будет указывать на простое конфигурационное решение для того, кто знает, что происходит.

Вещи, которые я думаю, я могу сделать вывод:

  • Библиотеки Poco были построены правильноони работают, когда у меня есть этот хак)
  • MinGW работает нормально
  • Возможно, настройка eclipse не правильно связывает вещи.

Итак, мой вопрос:Кто-нибудь знает, что это неправильно, что может вызвать такое поведение?Как мне поставить «чистое» решение этой проблемы, а не мой недопустимо грязный хак?

Мой взломанный основной, который обходит проблему:

int main(int argc, char** argv)
{
    std::cout << "test1" << std::endl;
    std::cout.flush();

    AgentServer app;
    app.run(argc, argv);

    LoggingFactory::defaultFactory();

    AutoPtr<ConsoleChannel> pCCChannel(new ConsoleChannel);
    AutoPtr<FileChannel> pChannel(new FileChannel);
    pChannel->setProperty("path", "sample.log");
    pChannel->setProperty("rotation", "2 K");
    pChannel->setProperty("archive", "timestamp");
    Logger::root().setChannel(pChannel);
    Logger& logger = Logger::get("TestLogger"); // inherits root channel

    poco_warning(logger, "This is a warning");

    try
    {
        Path myPath = new Path();
        poco_warning(logger, myPath.current());

        int i = NumberParser::parse("5");

        FileOutputStream myFileOutputStream("test.file");
        myFileOutputStream << "test";
        OutputLineEndingConverter conv(myFileOutputStream," ");

        std::stringstream xmlstream("test");
        UTF8Encoding myUTF8Encoding;
        XMLWriter writer(xmlstream,0,"UTF-8", &myUTF8Encoding);
        std::ostringstream ostr1("test2");    
        OutputStreamConverter converter1(ostr1,myUTF8Encoding,myUTF8Encoding);

        URI uri;
        uri.getHost();
        URIStreamOpener opener;
        opener.open(uri);
    } catch(...)
    {
        poco_warning(logger, "Swallowing exception");
    }
    //poco_warning(logger,);
    //AgentServer app;
    //return app.run(argc, argv);
}

1 Ответ

0 голосов
/ 04 октября 2011

Когда вы собираете poco, вы получаете папку с именем "lib". Поэтому сделайте так, чтобы ваш компоновщик указал на эту папку, в которой находятся все библиотеки для poco Теперь не должно быть ошибок ссылок. Если указано, что отсутствуют файлы * .dll:

  • Затем скопируйте содержимое из папки "(путь pocobuild) \ bin" в папку сборки проекта. Иначе,
  • Добавить путь (pocobuild path) \ bin "к переменной среды (PATH).
...