Я пытаюсь скомпилировать и запустить простой пример потока поддержки (см. Код ниже), но когда я пытаюсь запустить программу всегда, я получаю «Ошибка сегментации (ядро сброшено)». Я был скомпилирован и запустил программу в других средах, на всех это удалось (OS X, Linux), моя проблема только в Solaris. Я не знаю, что может случиться, кто-то может помочь мне понять, в чем проблема?
-bash-3.00$ CC -m64 -L/export/home/ulcm/standalone/lib -lboost_thread -pthreads -DC7_Q -D_REENTRANT -I/export/home/ulcm/standalone/include -o main main.cpp
CC: Warning: Option -pthreads passed to ld, if ld is invoked, ignored otherwise
-bash-3.00$ ./main
Segmentation Fault (core dumped)
1.48.0
-bash-3.00$ mdb ./main ./core
Loading modules: [ ld.so.1 libc.so.1 ]
> ::status
debugging core file of main (64-bit) from sgdev0
file: main
initial argv: ./main
threading model: multi-threaded
status: process terminated by SIGSEGV (Segmentation Fault)
>
> ::stack
libc.so.1`memcpy+0x1880()
libCstd.so.1`__1cDstdMbasic_string4Ccn0ALchar_traits4Cc__n0AJallocator4Cc___Hreserve6ML_v_+0x3a()
libstlport.so.1`__1cDstdG__copy4Cpkcn0AUback_insert_iterator4n0AMbasic_string4Ccn0ALchar_traits4C c__n0A
Jallocator4Cc______Cl_6FTA3TBrkn0AbArandom_access_iterator_tag_pTC_4_+0x40e()
libstlport.so.1`__1cDstdO_Init_timeinfo6Frn0AK_Time_Info__v_+0x3c0()
libstlport.so.1`__1cDstdM_Locale_implTmake_classic_locale6F_p1_+0x472()
libstlport.so.1`__1cDstdGlocaleN_S_initialize6F_v_+0xe()
libstlport.so.1`__SLIP.INIT_A+0x10()
libstlport.so.1`_init+0x6d()
ld.so.1`call_init+0x10a()
ld.so.1`setup+0xa5e()
ld.so.1`_setup+0x2d0()
ld.so.1`_rt_boot+0x6d()
0xfffffd7fffdffd18()
>
-bash-3.00$ cat /etc/release
Solaris 10 10/08 s10x_u6wos_07b X86
Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
Use is subject to license terms.
Assembled 27 October 2008
-bash-3.00$ CC -V
CC: Sun C++ 5.11 SunOS_i386 2010/08/13
usage: CC [ options ] files. Use 'CC -flags' for details
#include <iostream>
#include <string>
#include <boost/thread.hpp>
#include <boost/thread/mutex.hpp>
using namespace std;
boost::mutex m;
unsigned long long counter = 0;
void funcMutex()
{
cout<<">> funcMutex()"<<endl;
for (int i = 0; i < 5; i++)
{
m.lock();
++counter;
cout<<">> counter:"<<counter<<endl;
m.unlock();
}
}
int main()
{
cout<<"Hello world!!!!"<<endl;
// Start funcMutex on a thread.
boost::thread t1(&funcMutex);
boost::thread t2(&funcMutex);
// Join threads.
t1.join();
t2.join();
cout<<"...end"<<endl;
return 0;
}
Задача ещё не решена.