我在将 libevent 链接到 ubuntu 14.04 LTS 服务器上的 c 项目时遇到问题。在 ArchLinux 和 Centos7 上一切正常(我在虚拟机上运行的 ubuntu 和 centos)。
这是我的 Makefile:
TARGET: opoznienia
CFLAGS = -Wall -O2 --std=c11 -D DEBUG=1 $(shell pkg-config --cflags libevent_pthreads) -pthread -Wextra
LFLAGS = -Wall $(shell pkg-config --libs libevent_pthreads) -pthread -Wextra
OFILES = main.o err.o dropnobody.o ... <-- tl;tr
opoznienia: $(OFILES)
$(CC) $(LFLAGS) $^ -o $@
.PHONY: clean TARGET
clean:
rm -f opoznienia *.o *~ *.bak
在 ubuntu 上我收到错误:
telnet_server.c:(.text+0xfc): undefined reference to `event_new'
最佳答案
GNU 链接器从左到右解析目标文件参数 (.o .a .so),尝试匹配所有 undefined symbol 。目标文件的顺序在这里非常重要,因为如果在当前目标文件之前的参数列表中传递的任何目标文件未使用任何符号,GNU 链接器就会“忘记”这些符号。
根据您的情况,尝试更改链接订单形式:
$(CC) $(LFLAGS) $^ -o $@
致:
$(CC) $^ $(LFLAGS) -o $@
请告诉我们这是否有帮助。
关于c - libevent 在 ubuntu 服务器 14.04 上的链接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32283933/