【问题标题】:fedora 22 multiple undefined reference errors when linking shared objectfedora 22 链接共享对象时出现多个未定义的引用错误
【发布时间】:2016-03-02 22:50:32
【问题描述】:

我正在尝试在我新安装的 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 的新版本无关。可能有一些环境变量或某些东西没有通过我的新安装,但我不知道它们可能是什么。

【问题讨论】:

  • 显然你没有发布实际的makefile。无法为您提供帮助。
  • 您的帖子中几乎没有足够的信息来帮助您一点,粘贴完整的 makefile 将是朝着正确方向迈出的一步,正如@iharob 已经提到的那样。我怀疑您使用的 Fedora 版本是问题的原因,但实际上,我无法确定...
  • 我发布了整个makefile。我更改了文件、函数等的名称以保护无辜者。有几十个源代码文件,几千行代码。我认为上传整个项目并不实用。是否清楚其他文件中引用的函数是未定义引用的原因?我不知道要提供什么其他信息——我求助于 stackoverflow 的部分原因。

标签: c makefile shared-libraries fedora


【解决方案1】:

显然我现在需要在这些函数中插入 extern 关键字。该代码之前编译并运行得非常好......我想重申,为了后代,我确实在我的问题中发布了整个 makefile。

【讨论】:

  • 最后一点。需要 extern 关键字的函数都被内联了。
猜你喜欢
  • 1970-01-01
  • 2011-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-25
  • 2017-03-13
  • 2012-09-04
  • 1970-01-01
相关资源
最近更新 更多