2017-10-29 7 views
4

私は静的ユーザライブラリでpthreadを使いたいですが、それを使用する各プロジェクトに '-lpthread'を追加しない限り依存プロジェクトはリンクされません。gccでは、スタティックユーザライブラリにライブラリ(-lpthread)を含めるにはどうすればいいですか?

自分のユーザーライブラリに「-lpthread」と指定します。実際には、私はそれをしましたが、何もしません。私はまだそうでない場合は、私が

Invoking: GCC C++ Linker 
g++ <....> 
/usr/bin/ld: /home/xxx/git/xxx/xxx.CUtil/Debug/libxxx.CUtil.a(EzyThread.o): undefined reference to symbol '[email protected]@GLIBC_2.2.5' 

を取得し、私もそれを使用してプロジェクトにその依存関係を含める必要がある場合IMOそれは、私自身のユーザーライブラリの目的に反し、依存プロジェクトに「-lpthread」を追加する必要があります。 pthreadの代わりに別の内部メカニズムを使用することにした場合はどうすればよいですか?

私は私が何をしたいんMS VCに

#pragma comment(lib, "SomeOtherStuff.lib") 

を使用しました - しかし、私はgccの環境になりましたよ。私は感情に高いと思われる#pragma comment(lib, "xxx.lib") equivalent under Linux?をチェックし、利用可能な情報については低かった。 gccに似たようなものがありますか、それとも依存するプロジェクトごとに '-lpthread'を指定しないようにするには何か他の方法がありますか?私はCがOOPではないことを知っていますが、なぜ各依存関係はユーザーライブラリの実装方法を工夫する必要がありますか?

(#pragmaメソッドのようなものが '-lpthread'よりも長いとは言わないでください)#pragmaまたはそれと同等のメカニズムがユーザーライブラリにありますが、 '-lpthread'は一度入力されます。潜在的に何百回も必要とされ、ユーザライブラリの根底にあるメカニズムが変わった場合に何度も変更する必要があります)。

+1

AFAIKできません。 – immibis

+0

この種のものは、通常、ビルドシステムに委任されます。 –

+0

'.o'を解凍してlibヘルプに追加しますか? 'ar t/usr/lib/x86_64-linux-gnu/libpthread.a'、[man ar](https://linux.die.net/man/1/ar)を参照してください。 –

答えて

0

静的ライブラリは、実際にはオブジェクトファイルのダムアーカイブの上にある小さなソースです。特に、他のライブラリへの依存性を追跡しません。

gccに似たようなものがありますか、それとも依存するプロジェクトごとに '-lpthread'を指定しないでください。 ... 「-lpthread」が潜在的に何百回も必要に応じて、ユーザーライブラリ内の根底にあるメカニズムは、これは通常、(ビルドシステムレベルで行われ、Unixの世界では

を変更した場合など、多くの時間を変更する必要がありますAutoconfを扱う場合は、環境変数LIBSを適切に設定します)。私のユーザーライブラリ内の#pragma、または同等のメカニズムは、一度プラグマの

セマンティクスを入力されていることを

注意はよくかかわら指定されていません。まず、異なるソースファイルに2つのプラグマがある場合、どのライブラリを最初にリンクする必要がありますか?

関連する問題