1

2つのプロジェクト:

  • ローダー、スタンドアロン実行可能ファイル(モジュールのみをロード)
  • 任意のモジュール、共有ライブラリ(librainbowdash.so)(多くのモジュールが存在する可能性があります)

現在、モジュールはとリンクされていますが、-lpthreadspthreadが共有オブジェクトとしてのみバインドされていると思わせる奇妙なエラーが発生し、ローダーがモジュールをロードすると、pthreadがロードされません。(GDBを使用したデバッグは不可能です。そのようなエラーです)。

-lスイッチは静的ライブラリのみを許可すると思いましたか?しますか?そうですね。

4

3 に答える 3

2

-lライブラリ名を指定します。ライブラリ名を静的ライブラリまたは共有オブジェクトに解決して、必要に応じてリンクするのはリンカ次第です。そして、使用される共有ライブラリをロードするのはローダーの仕事です。

于 2012-04-30T16:48:13.687 に答える
1

ldとgccのマンページを見ると、「オプショングループ」を定義することができます。少し錆びているかもしれませんが、次のようになります。

gcc -o yourprog -Wl,-Bstatic yourprog.c -lstatic_lib -Wl,-Bdynamic -ldynamic_lib

正確な呪文はおそらく間違っています。

経験から、静的ライブラリのフルパスを渡すことは、上記の呪文の正確な形式を理解するよりもはるかに頭痛の種ではないことが証明されています。

そうは言っても、pthreadを静的にリンクすることで多くのメリットが得られるとは思えません。

あなたも使うかもしれないと思います

gcc -pthread ...

同じように。

単純な-staticを使用すると、出力とそのすべての依存関係が静的になります。これはおそらくあなたが望むものではありません。

于 2012-05-01T07:05:44.870 に答える
0

lpthread共有ライブラリが間違った場所を指している可能性があります。lddたとえば、ツールを使用するldd libfoo.soと、このようなリンクの問題を見つけるのに非常に効果的な方法になることがよくあります。

于 2012-04-30T16:58:52.067 に答える