我在ubuntu 14.04 LTS服务器上将libevent链接到我的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'
答案 0 :(得分:1)
GNU链接器从左到右解析对象文件参数(.o .a .so),试图匹配所有未定义的符号。目标文件的顺序在这里非常重要,因为GNU链接器会忘记&#39;任何符号,如果它们没有被当前目标文件之前的参数列表中传递的任何目标文件使用。
在您的情况下,请尝试更改链接顺序表单:
$(CC) $(LFLAGS) $^ -o $@
要:
$(CC) $^ $(LFLAGS) -o $@
如果有帮助,请告诉我们。