我有几个使用共享库的程序。这些共享库反过来使用各种标准C库。即
程序A和程序B都使用共享库S.共享库S使用std C数学。我希望能够将共享库S与标准库静态链接,然后将程序A和B静态链接到S,这样我就不必拖动库文件,因为这些程序将在运行一个运行BusyBox 0.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
编辑:链接共享库编译得很好,我还没有测试它们
答案 0 :(得分:2)
在lgainscalecalc之后放入$(LIBFLAGS)。 链接器命令行与位置有关。在库之后放置-lm将使链接器使用libm.a来解析库使用的引用。