私は C++ でのプログラミングにかなり慣れていないので、pthreads を使用しています。コードを OpenWRT 用にクロス コンパイルしていますが、ボードでプログラムを実行すると何らかの理由でセグメンテーション エラーが発生しますが、PC では正常に実行されます。小さな C プログラムを試してみたところ、問題なく動作したため、コンパイルのリンク段階でエラーが発生したと思われます。また、ファイルの名前を .cpp に変更して g++ でコンパイルしても機能します。
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
void *run(void *dummyPtr) {
printf("I am a thread...\n");
return NULL;
}
int main(int argc, char **argv) {
printf("Main start...\n");
pthread_t connector;
pthread_create(&connector, NULL, run, NULL);
printf("Main end...\n");
return 0;
}
Eclipse コンパイラーからの出力:
**** Build of configuration Release for project ThreadTest ****
make all
Building file: ../src/ThreadTest.cpp
Invoking: GCC C++ Compiler
mipsel-linux-g++ -O3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/ThreadTest.d" -MT"src/ThreadTest.d" -o"src/ThreadTest.o" "../src/ThreadTest.cpp" -lpthread
mipsel-linux-g++: -lpthread: linker input file unused because linking not done
Finished building: ../src/ThreadTest.cpp
Building target: ThreadTest
Invoking: GCC C++ Linker
mipsel-linux-g++ -o"ThreadTest" ./src/ThreadTest.o -lpthread -static
Finished building target: ThreadTest
編集: 古いコードを削除し、新しいより単純な例を追加しました。このコードは、C プログラムとしてコンパイルすると実行されますが、C++ プログラムとしてコンパイルすると実行されません。ボード上で 2.6.26.3 カーネルを実行しています。