独自の uClibc 組み込みシステムを構築しようとしています。いくつか問題が発生しましたが、2 日後にはすべて解決しました。残っているのは 1 つだけです:pthread
正しく動作しません。これは、python の構成スクリプトからの簡単なプログラムです。
#include <pthread.h>
void* routine(void* p){return NULL;}
int main(){
pthread_t p;
if(pthread_create(&p,NULL,routine,NULL)!=0)
return 1;
(void)pthread_detach(p);
return 0;
}
私の glibc ベースのシステムでは、実行して終了します。しかし、私の uclibc ベースのシステムでは、実行され、スレッドが終了し、フリーズします。
[Thread debugging using libthread_db enabled]
[New Thread 0x801 (LWP 17631)]
[New Thread 0x402 (LWP 17632)]
[Thread 0x402 (LWP 17632) exited]
[Thread 0x801 (LWP 17631) exited]
^C
Program received signal SIGINT, Interrupt.
0xb7f768e7 in sigsuspend () from /lib/libc.so.0
古いものと新しいものの両方の linuxthreads を試しましたが、どれも機能しませんでした。アイデアはありますか?
編集:
OK、さらに情報を見つけました:
#include <pthread.h>
#include <stdio.h>
void* routine(void* p){printf("AAA!\n");return NULL;}
int main(){
pthread_t p;
pthread_create(&p,NULL,&routine,NULL);
printf("BBB!");
(void)pthread_detach(p);
pthread_exit(0);
exit(0);
}
"AAA!" のみを出力し、その後フリーズします (glibc システムは "AAA!" と "BBB!" の両方をランダムな順序で出力します)。したがって、ulibc pthreads 自体に何らかのエラーがあるに違いないと思います。他に助けはありますか?他の pthread テストをいくつか試してみましたが、それぞれが最終的にフリーズします。編集:なぜこれが起こっているのかわかりませんでしたが、コンパイル済みの uclibc をコピーしたところ、現在は動作しています。