何らかの理由
cc -g -lm -DBLITZ_HOST_IS_LITTLE_ENDIAN
math.h
?を使用したコードでエラーが発生します。GCC バージョン 4.0.3 (文書化された作業バージョン) とバージョン 4.6.3 (私の現在のバージョン) の間に違いがある可能性はありますか?
makefile
およびasm.c
@ https://gist.github.com/3801291
これはubuntu 12.04にあります
私の端末出力は要旨のコメントです。
何らかの理由
cc -g -lm -DBLITZ_HOST_IS_LITTLE_ENDIAN
math.h
?を使用したコードでエラーが発生します。GCC バージョン 4.0.3 (文書化された作業バージョン) とバージョン 4.6.3 (私の現在のバージョン) の間に違いがある可能性はありますか?
makefile
およびasm.c
@ https://gist.github.com/3801291
これはubuntu 12.04にあります
私の端末出力は要旨のコメントです。
それ以外の
cc -g -lm -DBLITZ_HOST_IS_LITTLE_ENDIAN foo.c
試す:
cc -g -DBLITZ_HOST_IS_LITTLE_ENDIAN foo.c -lm
リンカーがライブラリを検索するとき、以前に未定義のシンボルの定義を含むモジュールにリンクします。
リンカが の-lm
前に検索する場合foo.o
、 thenpow()
はまだ未定義ではありません。逆に、foo.o
最初に来ると undefine さpow()
れ、-lm
その後解決できます。
編集:メイクファイルでこのアドバイスを実現するには、次の変更を行います。
CFLAGS=-g -DBLITZ_HOST_IS_LITTLE_ENDIAN
LDLIBS=-lm
...
asm: asm.c
$(CC) $(CFLAGS) asm.c $(LDLIBS) -o asm
私は最近、自動ビルダー、つまりDrone.ioを使用してこの問題に苦しんでいます。
問題は、Ubuntu 12.04 の gcc がデフォルトで-Wl,--as-neededとリンクしていたことです。私の場合、プロジェクトは autotools を使用していました。つまり、コンパイル順序を変更するために何かを書くのが面倒でした。代わりに、必要に応じてフラグを変更すると、問題が修正されました。
-gabriel_LDFLAGS = $(GLIB2_LIBS) $(DBUS_LIBS) -lssh
+gabriel_LDFLAGS = -Wl,--no-as-needed $(GLIB2_LIBS) $(DBUS_LIBS) -lssh
完全な情報については、 https://bitbucket.org/kikeenrique/gabriel/commits/f08eefdca3f7bb90f48f5a6fbfc8839422572508で修正コミットを確認できます。
修正を適用する前にエラーのあるログを確認することも、修正を適用した後にエラーのないログを確認することもできます。