I think my problem is a simple linking problem. I have looked through the
archives and tried a few things to no avail.
I am trying to compile the simple thread example from the boost site (see
end of message).
I am using 64 bit Redhat linux on a dual core opteron box.
g++ -v
Reading specs from /usr/lib/gcc/x86_64-redhat-linux/3.4.6/specs
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man
--infodir=/usr/share/info --enable-shared --enable-threads=posix
--disable-checking --with-system-zlib --enable-__cxa_atexit
--disable-libunwind-exceptions --enable-java-awt=gtk
--host=x86_64-redhat-linux
Thread model: posix
gcc version 3.4.6 20060404 (Red Hat 3.4.6-3)
I believe the boost libraries come pre-installed on linux, but just in case
I followed all the directions online and installed the libraries (I just
used whatever defaults the installed runs).
I compile the program below with:
g++ test.cpp (I renamed the sample program test)
and get these errors:
/tmp/cctHP3Df.o(.text+0x169): In function `main':
: undefined reference to `boost::thread::thread(boost::function0boost::function_base > const&)'
/tmp/cctHP3Df.o(.text+0x19b): In function `main':
: undefined reference to `boost::thread::join()'
/tmp/cctHP3Df.o(.text+0x1ae): In function `main':
: undefined reference to `boost::thread::~thread()'
/tmp/cctHP3Df.o(.text+0x1c4): In function `main':
: undefined reference to `boost::thread::~thread()'
/tmp/cctHP3Df.o(.gnu.linkonce.t._ZN12thread_alarmclEv+0x16): In function
`thread_alarm::operator()()':
: undefined reference to `boost::xtime_get(boost::xtime*, int)'
/tmp/cctHP3Df.o(.gnu.linkonce.t._ZN12thread_alarmclEv+0x2f): In function
`thread_alarm::operator()()':
: undefined reference to `boost::thread::sleep(boost::xtime const&)'
collect2: ld returned 1 exit status
Based on a few previous messages from the archives, I tried linking in the
thread library (shouldn't gcc find it by itself??)
g++ test.cpp -lboost_thread
and get these errors:
/usr/lib/gcc/x86_64-redhat-linux/3.4.6/../../../../lib64/libboost_thread.a(t
hrea d.o)(.text+0x54): In function
`boost::thread::~thread()':
: undefined reference to `pthread_detach'
/usr/lib/gcc/x86_64-redhat-linux/3.4.6/../../../../lib64/libboost_thread.a(t
hrea d.o)(.text+0x74): In function
`boost::thread::~thread()':
: undefined reference to `pthread_detach'
/usr/lib/gcc/x86_64-redhat-linux/3.4.6/../../../../lib64/libboost_thread.a(t
hrea d.o)(.text+0xca): In function
`boost::thread::join()':
: undefined reference to `pthread_join'
/usr/lib/gcc/x86_64-redhat-linux/3.4.6/../../../../lib64/libboost_thread.a(t
hrea d.o)(.text+0x251): In function
`boost::thread_group::join_all()':
: undefined reference to `pthread_join'
/usr/lib/gcc/x86_64-redhat-linux/3.4.6/../../../../lib64/libboost_thread.a(t
hrea d.o)(.text+0x8b4): In function
`boost::thread_group::~thread_group()':
: undefined reference to `pthread_detach'
/usr/lib/gcc/x86_64-redhat-linux/3.4.6/../../../../lib64/libboost_thread.a(t
hrea d.o)(.text+0x924): In function
`boost::thread_group::~thread_group()':
: undefined reference to `pthread_detach'
/usr/lib/gcc/x86_64-redhat-linux/3.4.6/../../../../lib64/libboost_thread.a(t
hrea d.o)(.text+0xb4e): In function
`boost::thread_group::create_thread(boost::functi
on0boost::function_base > const&)':
: undefined reference to `pthread_detach'
collect2: ld returned 1 exit status
Thanks in advance for any help.
Steve
test.cpp:
#include
#include
#include <iostream>
struct thread_alarm
{
thread_alarm(int secs) : m_secs(secs) { }
void operator()()
{
boost::xtime xt;
boost::xtime_get(&xt, boost::TIME_UTC);
xt.sec += m_secs;
boost::thread::sleep(xt);
std::cout << "alarm sounded..." << std::endl;
}
int m_secs;
};
int main(int argc, char* argv[])
{
int secs = 5;
std::cout << "setting alarm for 5 seconds..." << std::endl;
thread_alarm alarm(secs);
boost::thread thrd(alarm);
thrd.join();
}