Как использовать потоки POCO?

Я начал использовать POCO и просмотрел документацию потоков. Из этого я создал тестовую программу, которая, похоже, не работает:

#include <iostream>
#include <Poco/Thread.h>
#include <Poco/ThreadTarget.h>
using namespace std;

void myfunc(){
 cout << "test";
}
int main(){
    Poco::ThreadTarget ra(&myfunc);
    Poco::Thread thr;
    thr.start(ra);
    return 0;
}

Я получаю эти ошибки:

C:\Users\M\workspace\Poco\Debug/../src/Poco.cpp:18: undefined reference to `Poco::ThreadTarget::ThreadTarget(void (*)())'
C:\Users\M\workspace\Poco\Debug/../src/Poco.cpp:19: undefined reference to `Poco::Thread::Thread()'
C:\Users\M\workspace\Poco\Debug/../src/Poco.cpp:20: undefined reference to `Poco::Thread::start(Poco::Runnable&)'
C:\Users\M\workspace\Poco\Debug/../src/Poco.cpp:19: undefined reference to `Poco::Thread::~Thread()'
C:\Users\M\workspace\Poco\Debug/../src/Poco.cpp:18: undefined reference to `Poco::ThreadTarget::~ThreadTarget()'
C:\Users\M\workspace\Poco\Debug/../src/Poco.cpp:19: undefined reference to `Poco::Thread::~Thread()'
C:\Users\M\workspace\Poco\Debug/../src/Poco.cpp:18: undefined reference to `Poco::ThreadTarget::~ThreadTarget()'

Я предполагаю, что это происходит из-за какой-то фундаментальной ошибки в моих знаниях о потоках POCO. Может ли кто-нибудь предоставить рабочую программу или, лучше, объяснение того, как именно работают потоки POCO. Документация, хотя и обширная, не объясняет, что делают несколько классов, участвующих в потоках, в целом.


person sinθ    schedule 22.08.2012    source источник
comment
Это похоже на ошибки компоновщика - вы ссылаетесь на соответствующую библиотеку?   -  person mathematician1975    schedule 23.08.2012
comment
Это не имеет отношения к вашему вопросу, но я настоятельно рекомендую отказаться от Poco и использовать Boost в качестве альтернативы.   -  person Collin Dauphinee    schedule 23.08.2012
comment
Я бы добавил thr.join(); Заявление, чтобы избежать условий гонки int main(){ Poco::ThreadTarget ra(&myfunc); Poco::Thread thr; thr.start(ra); thr.join(); return 0; }   -  person Aviad Rozenhek    schedule 08.10.2012


Ответы (1)


Ваши ошибки выглядят как ошибки компоновщика. Согласно документации здесь http://pocoproject.org/docs/Poco.Thread.html вам необходимо убедиться, что вы ссылаетесь на библиотеку PocoFoundation. Может быть, вы уже делаете это, но если нет, вам нужно.

Вы не указываете используемую ОС, но если вы используете g++, попробуйте добавить -lPocoFoundation в свои инструкции по сборке, чтобы связать с библиотекой и указать путь к этой библиотеке. Если вы используете окна, добавьте PocoFoundation.lib в свой проект.

person mathematician1975    schedule 22.08.2012