web-dev-qa-db-ja.com

glibcを静的にリンクしますが、他のライブラリをGCCと動的にリンクします

ターゲットプラットフォームは非常に古いものしかサポートしていないため、glibcをプロジェクトに静的にリンクする必要があります(ただし、ツールチェーンから静的にリンクされたglibcで動作するため、確認しました)。

残念ながら、このアプリケーションはpthreadライブラリを使用する必要がありますが、静的にリンクされたlibpthreadはスペースを取りすぎます。

Glibcを静的にリンクし、pthreadを動的にリンクしたい。

このコマンドを実行した後

powerpc-unknown-linux-gnu-gcc object_files -lrt -lpthread -Wl,-Bstatic -lc 

私は得ます:

/powerpc-unknown-linux-gnu/bin/ld: cannot find -lgcc_s
13
nkdm

-static-libgccそれが役立つ場合

12
Anycorn

-staticではなく-Wl,-staticを使用する必要があります。後者はgccの知識をバイパスするため、gccはまだ静的libgcc_s.soではなく共有libgcc_eh.aをリンクしようとしています。

Libcを静的にリンクし、libpthreadを動的にリンクすることが目的である場合、これは単に機能しません。 libpthreadの異なるバージョンを混在させて一致させることはできません。それはglibcの一部であり、別のファイルであり、内部が一致する必要があります。同じバージョンでも、libcを静的にリンクしたり、動的にlibpthreadをリンクしたりすると、非常にうまくいかないと思います。

Glibcがニーズに対して大きすぎる場合は、 Clibc または musl のような別のlibcを試すことができます。