2009-03-06 3 views
1

個々のオブジェクトファイルをアーカイブすることにより、boostユーティリティregex静的ライブラリがarユーティリティで作成されることを理解します。boost regexをリンクする2つの方法のエラー

gccで-lオプションを使用してboost regexライブラリをリンクしました。これは非常にうまくいった。

g++ *.o libboost_regex-gcc-1_37.a -o sairay.out 

私は個別にブースト正規表現のソースファイルをコンパイルして、単一の実行に自分のアプリケーションのオブジェクト・ファイルとブースト正規表現のオブジェクトファイルをリンクしてみました。しかし今、私は間違いをしています。

g++ *.o -o sairay.out 
    Undefined      first referenced 
    symbol        in file 
    main        /opt/csw/gcc3/lib/gcc/sparc-sun-solaris2.8/3.4.5/crt1.o 

私は静的ライブラリをリンクしapplicatiionと静的ライブラリファイルの個々のオブジェクトをリンクとの違いは何か知りたいですか?

+0

私はあなたの最初の文を見逃してごめんなさい。しかし、あなたはすでに何が起こっているのか理解しているようです。あなたの主な機能を含んでいるオブジェクトファイルがリンクされていることを再度確認してください。 –

+0

私はgccと-lをコンパイラ/オプションとしてそれぞれミスタイプしたと思いますが、あなたのコマンドには反映されません。あなたは何をしているのですか? – Suroot

答えて

2

を含むオブジェクトファイルを表示するには、以下を試してみてください、私はそれをすることになっていると思う:

g++ *.o -L. -lboost_regex-gcc -o sairay.out -static 
0

明らかに、main機能を定義するアプリケーションのオブジェクトファイルを含めるのを忘れていました。たぶんg++ -c myapp.cppの代わりにg++ myapp.cppとタイプしたでしょうか(実際にはすでにリンクされているバイナリではなくオブジェクトファイルを実際に作成しています)。

静的ライブラリは実際には、クイックルックアップのために添付されたシンボルテーブルインデックスを持つ多くのまたは少数のオブジェクトファイル(arユーティリティによってアーカイブされています)のアーカイブに過ぎません。ですから、リンクにオブジェクトファイルを手動で含めると、基本的に同じことをやっていると思います。

は、それが

ar tv libboost_regex-gcc-1_37.a 
関連する問題