fedora 22链接共享对象时多个未定义的引用错误

时间:2015-11-29 04:12:38

标签: c makefile shared-libraries fedora

我正在尝试在我新安装的Fedora 22上编译一个C语言库作为共享对象。该项目在我的旧版Fedora 20上编译得很好。但现在,当我运行我的makefile时:

CC=gcc

vpath %.c src
vpath %.h inc


CFLAGS = -fPIC
INCLUDE = -Iinc -I/usr/include -I/usr/local/include
LIBPATH = -L/usr/lib -L/lib64 
LIBS = -lportaudio -lm -lpthread -ldl
OBJ_PATH = ./objs

SRCS = my_code1.c my_code2.c # etc.

OBJS = $(SRCS:.c=.o)

.PHONY: libmylib.so

all: libmylib.so

debug: $(CFLAGS) += -DDEBUG -O0 -g3 -DPD
debug: all
release: $(CFLAGS) += -DTESTING -O2 -DPD -funroll-loops -fomit-frame-pointer
release: all

%.o: %.c
    $(CC) $(CFLAGS) $(INCLUDE) $(LIBPATH) $(LIBS) -c -o $@ $^

libmylib.so: $(OBJS)
    $(CC) -shared -Wl,-soname,libmylib.so \
    -Wl,--no-undefined $(OBJS) -lc -lportaudio -ldl -lm -lpthread
    mv libmylib.so ./bin
    mv *.o $(OBJ_PATH)

clean:
    rm $(OBJ_PATH)/*.o
    rm bin/libmylib.so

我收到很多未定义的引用错误:

my_code1.o: In function `func_in_my_code1':
my_code1.c:(.text+0x1b8): undefined reference to `func_from_my_code2'
my_code2.o: In function `func_in_my_code2':
my_code2.c:(.text+0x310): undefined reference to `func_from_my_func1'

有问题的函数肯定在代码中定义。据推测,这些在编译阶段被编译成.o文件。

完全相同的构建环境适用于我以前的fedora安装。我不知道为什么我应该得到这些错误。

另外,如果我在没有-Wl,--no-undefined标志的情况下编译,它编译得很好,但是当我尝试从另一个应用程序加载库时,它会抛出同一组未定义的错误。

这可能与Fedora的新版本无关。可能有一些环境变量或某些东西没有通过我的新安装,但我不知道它们可能是什么。

1 个答案:

答案 0 :(得分:0)

显然我现在需要在这些函数中插入extern关键字。代码编译完成之前运行良好...我想重申一下,为了后人的缘故,我在我的问题中发布了整个 makefile。