2012-03-14 7 views
2

私は基本的なロールプレイングゲームを作成中です。 Boostライブラリを静的にインクルードして、私のゲームを実行する人にそれらを持てないようにしたい。ブーストとncursesとの静的リンク

$ g++ -static -o karthas *.o -lncurses -lmenu -lboost_system -lboost_filesystem 

しかし、どうやら-staticはncursesベースに影響を及ぼしている:私はあなたがしなければならないすべては私のコマンドは、このようなものですので、コンパイルコマンドラインに-staticを追加していることを調査し、ルックアップ。私はエラーの全体の束を得ています、そのほとんどは 'SP'への未定義参照です。

ncursesではなくBoostへの静的リンクは可能ですか?それをどうやってやりますか?

+0

通常のダイナミックリンクは機能しますか?静的リンクなしでプログラムをビルドして実行できますか? – chrisaycock

+0

@chrisaycockはいダイナミックリンクは、bostライブラリがインストールされているため、私のシステムで動作します。しかし、私は何が起こってほしいですか私はユーザーがブーストライブラリをインストールすることを要求せずに私のプログラムを配布することができます。 – adamk33n3r

答えて

4

静的にリンクするライブラリと動的にリンクするライブラリを選択して、その名前の前に-Wl,-staticまたは-Wl,-Bdynamicのいずれかを入れることができます。

たとえば、と:

g++ -o karthas *.o -Wl,-static -lmenu -lboost_system -lboost_filesystem -Wl,-Bdynamic -lncurses 

メニュー、boost_systemとboost_filesystemライブラリを静的およびncursesを動的にリンクされます。

(ただし、実行可能ファイルでブーストDLLを配布し、静的にリンクすることはできません)。

+0

これは完璧です!ありがとう。しかし、カップル以上のもの。今、私は実行可能ファイルを実行すると、共有ライブラリをロード中にエラーが発生します:libtinfo.so.5。それは何ですか?私はそれを静的にリンクできますか? あなたの最後の声明について、どのように実行可能ファイルでそれらを配布するのですか?どうやって違う方法でコンパイルすればいいでしょうか?また、私はlinuxにあるので、彼らはdllのarentを持っています – adamk33n3r

+0

私はlibtinfo.so.5がncursesからだと思います。だから、私はこのポストがそれに関連していないことを知っていますが、静的にもncursesをリンクすることができますか?私は、ncursesが動的にリンクしているライブラリであることを認識していませんでした。 – adamk33n3r

+0

静的なncursesを可能にするために.Oの作成に-DNCURSES_STATICを追加することができました。しかし、私は見つけることができません-lgcc_sエラー。それをもっと詳しく見る – adamk33n3r

0

しかし、thisを見ると、あなただけではなく、あなたの問題が見つかりました。しかし、thisは、どちらの方法でも、あなたのソリューションを持っている可能性があります。 Btwでは、いくつかのブーストライブラリは、ファイルにインクルードされたときにインポートされるインライン関数よりも少ししかありません。

+0

すべてではありません。それらのうちのいくつかは、ファイルシステムのように、コンパイルされたバイナリです。 – adamk33n3r

+0

ライブラリによって異なります。いくつかのブーストライブラリはコンパイルされたコンポーネント(正規表現、テストなど)を持っています –

+0

@JamesMichaelHare Right。私の問題を解決する方法を知っていますか? – adamk33n3r

関連する問題