私はthis questionとよく似た問題があります。私はそのシンボルを参照するために作られているようだが、静的なlibを追加するようにリンカーに指示する必要がある。 その理由は、ライブラリが順番に、その機能を登録するには、メインプログラムからレジスタ()関数を呼び出すために起こっているその初期化を実行するために.init
または使用(__attribute__ ((constructor))
)内の関数が含まれていることです(読み:他の合格関数ポインタ)。後者は、ライブラリの初期化関数を経て登録されているよう autools、libtool、-Wl、-whole-archive
bin_PROGRAMS = pktanon
pktanon_SOURCES = main.cpp
pktanon_DEPENDENCIES = $(lib_LIBRARIES)
pktanon_LDADD = libpktanon.la $(LDADD)
注「ラ」の拡張子の代わり:
しかし、私は だから以前mentionned質問に与えられた例を取って... libtoolを使用しています、私は次のように書く必要があると思います"libのために。
は今、どのように私は、リンカに--whole-archive
オプションに合格しなければなりませんか? the questionで提案されている答えは、それはMakefile.am ... にハードコードに.LIBS/libptanon.aようなパスを右感じていない...知られているアーカイブ(.a
ファイル)へのパスを想定し、リンカはありません
pktanon_LDFLAGS = -Wl,--whole-archive,libpktanon.la,--no-whole-archive
任意の提案:しようとした場合にその全アーカイブotpionで.la
ファイルを満たして好きではありませんか?
問題は私のLIBはむしろ反対より、メインプログラムからのシンボルを使用することである:autotoolsのコンビニエンスLIBS LがメインプログラムPにより参照シンボルを定義することを前提としていますautotoolsのはこのために、リンカーにP及びLを通過します。 --whole-archive(または--start-group)オプションがなければ、リンカーはLとPを "クロスリンク"しません。 私の場合、LはPからのシンボルを参照します。PはLによって参照されるシンボルを定義します。 autotools仮定の反対です。 この男に同じ問題がありました: http://lists.gnu.org/archive/html/automake/2006-03/msg00042.html ポイントII(モチベーション)セクション3を参照してください。 – user1159290
円形ではないようにデザインを修正するか、単に "ライブラリ"をオブジェクトファイルのコレクションとして扱い、アーカイブに入れないでください。このようなデザインは、たとえばWindowsに移植することはできません。 –