ld: final link failed: 出力に対応するセクションがありません

Armadillo 230 で開発を行っているメンバーから、リンカが「ld: final link failed: 出力に対応するセクションがありません」とエラーを吐く相談をうけました。

あまり見かけたことのないメッセージなので英語で表示させてみましたが、「ld: final link failed: Nonrepresentable section on output」そのままです・・・

よくわからなくてしばらく考えていたのですが、すぐその上で、「hidden symbol `mknod' in /usr/arm-linux-gnu/lib/libc_nonshared.a(mknod.oS) is referenced by DSO」とメッセージが出ています。



結局原因は、リンクしようとした DSO には一切フラグを与えずに arm-linux-gccコンパイルしたもので、

リンク元の実行ファイルには Armadillo 用のフラグを与えてコンパイルしていたことが原因でした。



DSO のコンパイルに使ったオプション

arm-linux-gcc -fPIC -W -Wall -g -c log.c -o log.o
実行ファイルのコンパイルに使ったオプション

arm-linux-gcc -O2 -I/usr/arm-linux/include -I/usr/lib/gcc/arm-linux-gnu/4.1.2//include -Dlinux -D__linux__ -Dunix -DEMBED -Wall -fno-common -I../atmark-dist-20090126 -g -Wall -c log.c -o log.o


DSO の Makefile にも、

ROOTDIR=atmark-dist-20090126

ROMFSDIR = $(ROOTDIR)/romfs
ROMFSINST = romfs-inst.sh
PATH := $(PATH):$(ROOTDIR)/tools

UCLINUX_BUILD_USER = 1

include $(ROOTDIR)/.config
LIBCDIR = $(CONFIG_LIBCDIR)
include $(ROOTDIR)/config.arch

Armadillo用の付属品をつけてあげることで無事解決しました。