Hello, all.
Есть проблема с многопоточным приложением при статической компиляции.
Программа выглядит примерно так
main ()
{
for (i = 0; i<NUM_SITES; i++)
pthread_create (&thread[indexes[i]], NULL, work_funct, (void*)
&indexes[i]);
for (i = 0; i<NUM_SITES; i++)
pthread_join (thread[indexes[i]], NULL);
}
void *work_funct
{
....
n = 0;
printf ("!!!!!!!\n");
do
{
if (connect(sock, (struct sockaddr *) &host_addr, sizeof(struct
sockaddr)) == -1)
{
if(n == NUM_CONNECTIONS)
{
perror ("connect()");
return;
}
else
{
n++;
}
}
printf("!!!!\n");
}
while (n > 0);
.....
}
Вывод программы:
!!!!!!!
Killed
Если программу компилить без ключа -static, то всё работает.
Если запустить всего один(любой по номеру) процесс (при компиляции со
-static), то всё работает.
Не работае только при статической компиляции и кол-ве прцессов больше
1.
Строчка компиляции
gcc -o client3 client5.c `xml2-config --cflags` `pcre-config
--cflags-posix --libs-posix` -lrt -static `xml2-config --libs` -Wall
Версия gcc
# gcc -v
Reading specs from /usr/lib/gcc-lib/i586-suse-linux/3.3.3/specs
Configured with: ../configure --enable-threads=posix --prefix=/usr
--with-local-prefix=/usr/local --infodir=/usr/share/info
--mandir=/usr/share/man --enable-languages=c,c++,f77,objc,java,ada
--disable-checking --libdir=/usr/lib --enable-libgcj
--with-gxx-include-dir=/usr/include/g++ --with-slibdir=/lib
--with-system-zlib --enable-shared --enable-__cxa_atexit
i586-suse-linux
Thread model: posix
gcc version 3.3.3 (SuSE Linux)
система Linux SuSE 9.1.
# rpm -qa | grep glibc
glibc-locale-2.3.3-98
glibc-i18ndata-2.3.3-98
glibc-2.3.3-97
glibc-info-2.3.3-98
glibc-devel-2.3.3-97
#uname -r
2.6.4-52-default
Ранее компилировал gcc-3.2.2 на системе Red Hat 9.
# rpm -qa | grep glibc
glibc-devel-2.3.2-11.9
glibc-common-2.3.2-11.9
glibc-2.3.2-11.9
glibc-kernheaders-2.4-8.10
#uname -r
2.4.20-8bigmem
Всё было ок.
Буду благодарен за любые подсказки-наводки, так-что если у кого есть
мысли по этому поводу - пишите.
Спасибо.