pthreads を使った小さなテスト プログラムを C++ で書きたいと思っています。pthreads の経験はありませんが、これまで読んだところでは、pthreads は C の構造であるため問題があるということです。
私のコードは次のとおりです。
class A{
public:
int main();
void* do_work();
static void* helper_do_work(void*);
};
void * IMagFieldSvc::do_work(){
}
void* IMagFieldSvc::helper_do_work(void* context)
{
return ((IMagFieldSvc*)context)->do_work();
}
int A::main(){
…
pthread_create(&thread, &attr, &helper_do_work, &svc);
pthread_join(thread, NULL);
}
ただし、次のようにコンパイルします。
g++ -pthread test.cxx
戻り値
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/crt1.o: 関数_start':
(.text+0x20): undefined reference to
main で collect2: ld が 1 つの終了ステータスを返しました
追加してみました
extern "C" void* helper_do_work(void*);
これが何をしても、エラーは同じです
半泣き?
これについて別の質問を開く必要があるかどうかはわかりません:また、do_workでメンバー変数にアクセスして変更したいのですが、演習の全体的な目的は、メンバー変数にアクセスして変更し、__threadでスレッドローカルにする方法を見つけることでした。これらのメンバー変数は、独自のコンストラクターとデストラクターを持つ自己定義型です。なぜそれが違いを生むのかわかりませんが、明らかにそうです...