2012-01-02 10 views
0

私は/usr/include/nptl/pthread.hからpthread_setaffinity_npなどの関数を使用しています。システムlibpthreadライブラリの代わりにTLS libpthread-2.3.4.soライブラリにリンクする

リンカは、 "pthread_setaffinity_np"が見つからないと言っていますが、リンカが間違ったpthreadライブラリ(/usr/lib/libpthread.so)の参照を探しています。 CPUアフィニティのサポートが含まれています。私はRedHat 4にいます。

私はこの機能を含む/lib/tls/libpthread-2.3.4.soにリンクしなければならないと思います。しかし、libpthread-2.3.4.soにリンクすると、他のリンカエラーが発生しました。

RedHat 4のlibpthread-2.3.4.soにリンクする適切な方法は何ですか?事前に

おかげで、

ポール

+1

glibcのgit履歴ログによると、sched_setaffinity_npは2.3.3以降のツリーにあります。 –

答えて

0

それはおそらく動作しない場合があります。 NPTLは現在GNU libcにあります。そして、それはカーネルのバージョンに密接に関連しています(古いカーネルを使った古いディストリビューションをおそらく使用しています)。

あなたのニーズに合わせて、最新のNPTL(最新の十分なカーネル)を提供するシステムにアップグレードすることをお勧めします。プロセッサアフィニティは、pthreadライブラリ(多くの場合、libcとパッケージ化されています)とカーネルの内側(スケジューラに関連しているため)の両方で処理されます。

なぜあなたはインストールしませんか? CentOS 6(これはa derivative of RedHatです)?

限り、私は理解して、リンカが間違ってpthreadライブラリの参照を探している
+0

残念ながら、他の理由により、アップグレードはオプションではありません(私は大好きです)。 – Paul

+0

それから私はあなたが立ち往生していると思います。かなり最近のカーネルが必要です(私にはわかりません)。 chrootの内部に新しいディストリビューションをインストールしようとする可能性があります。 –

2

あなたの理解が間違ってです。

/usr/lib/libpthread.solibpthread.so.0libpthread_nonshared.aを使用してプログラムをリンクリンカスクリプト、です。 libpthread.so.0はシンボリックリンクである必要があります(おそらくlibpthread-2.3.4.so)。

/lib/i686に1つ、/lib/tlsに1つ、おそらく/libに1つなど、複数のバージョンのlibpthread-2.3.4.soがインストールされている可能性があります。実行時に使用されるものは、ハードウェアとカーネルによって異なります。

次のコマンドは何を印刷しますか?

find /lib -name 'libpthread.so.0' | xargs nm -A | grep pthread_setaffinity_np 

ldd /usr/bin/date 
関連する問題