1

共有ライブラリを使用するプログラムがいくつかあります。これらの共有ライブラリは、さまざまな標準Cライブラリを使用します。すなわち

プログラムAとプログラムBはどちらも共有ライブラリSを使用します。共有ライブラリSはstdCmathを使用します。共有ライブラリSを標準ライブラリに対して静的にリンクし、次にプログラムAとBをSに対して静的にリンクできるようにしたいので、これらのプログラムはで実行されるため、ライブラリファイルをドラッグする必要はありません。 BusyBox0.61を実行する組み込みシステム。ただし、共有ライブラリSに対してプログラムを静的にリンクしようとすると、GCCから次のようなエラーメッセージが表示されます。

../lib/libgainscalecalc.a(gainscalecalc.): In function 'float2gs':
[path to my C file].c:73: undefined reference to 'log'

誰かが私を助けてくれますか?私が使用しているmakeコマンドは以下のとおりです。

CFLAGS += -Wall -g -W
INCFLAGS = -I$(CROSS_INCLUDE)/usr/include  
LIBFLAGS += -L$(CROSS_LIB)/usr/lib -lm

gainscalecalc_static.o: gainscalecalc.c
$(CC) $(CFLAGS) -c $< -I. $(INCFLAGS) -o $@

gainscalecalc_dynamic.o: gainscalecalc.c
$(CC) $(CFLAGS) -fPIC -c $< -o $@

all: staticlib dynamiclib static_driver dynamic_driver

clean:
$(RM) *.o *.a *.so *~ driver core $(OBJDIR)

static_driver: driver.c staticlib
$(CC) $(CFLAGS) -static driver.c $(INCFLAGS) $(LIBFLAGS) -I. -L. -lgainscalecalc -o $@

dynamic_driver: driver.c dynamiclib
$(CC) $(CFLAGS) driver.c -o $@ -L. -lgainscalecalc

staticlib: gainscalecalc_static.o
$(AR) $(ARFLAGS) libgainscalecalc.a gainscalecalc_static.o
$(RANLIB) libgainscalecalc.a
chmod 777 libgainscalecalc.a

dynamiclib: gainscalecalc_dynamic.o
$(CC) -shared -o libgainscalecalc.so gainscalecalc_dynamic.o
chmod 777 libgainscalecalc.so

編集:共有ライブラリに対するリンクは正常にコンパイルされます、私はまだそれらをテストしていません

4

1 に答える 1

2

lgainscalecalcの後に$(LIBFLAGS)を置きます。リンカのコマンドラインは位置に依存します。ライブラリの後に-lmを配置すると、リンカはlibm.aを使用して、ライブラリが使用する参照を解決します。

于 2010-03-18T17:37:46.063 に答える