Makefile:链接器错误[重复]

Posted

技术标签:

【中文标题】Makefile:链接器错误[重复]【英文标题】:Makefile: linker errors [duplicate] 【发布时间】:2016-06-05 23:57:33 【问题描述】:

除了混合和匹配 .c.cpp 文件之外,这是一个简单的 Makefile —— 但是,我不确定它为什么不编译。我认为这是因为链接器错误,因为它只是在抱怨网络类。你们中的任何一个让大师知道以下内容有什么问题吗?

CC=g++
DEBUG=-g
CFLAGS=$(DEBUG) -Wall -D_POSIX_C_SOURCE -pthread -std=c++0x
HEADERS=cl_network.h

%.o: %.c $(HEADERS)
    $(CC) $(CFLAGS) $< -o $@

all: server.o client.o cl_network.o
    $(CC) $(CFLAGS) server.o -o server
    $(CC) $(CFLAGS) client.o -o client
    $(CC) $(CFLAGS) cl_network.o -o cl_network

client.o: client.cpp cl_network.h
    $(CC) $(CFLAGS) -c client.cpp

server.o: server.c
    $(CC) $(CFLAGS) -c server.c

cl_network.o: cl_network.cpp cl_network.h
    $(CC) $(CFLAGS) -c cl_network.cpp

.PHONY: clean
clean:
    rm  server.o server client.o client cl_network cl_network.o

Errors:
client.cpp:49: undefined reference to `cl_network::cl_network(char*)'
client.cpp:50: undefined reference to `cl_network::connectToServer()'
client.cpp:63: undefined reference to `cl_network::~cl_network()'
client.cpp:63: undefined reference to `cl_network::~cl_network()'

【问题讨论】:

旁注:如果您的编译器支持它,请使用 -std=c++11 而不是 -std=c++0x 以获得更好的艺术分数。 :) ***.com/questions/24589105/… 行:.PHONY; all 应该插入到“所有”目标之前 为避免对宏进行多次评估,请使用:macroName := contents rather than macroName=contents` make 文件中的第一个 'target' 应该是 'all:',而不是 '%.o:' 为什么make文件有这个:%.o: %.c $(HEADERS) $(CC) $(CFLAGS) $&lt; -o $@当每个涉及的源文件都在单独的规则中处理时? 【参考方案1】:

我猜你可能希望你的 all 目标看起来像这样

all: server.o client.o cl_network.o
    $(CC) $(CFLAGS) server.o cl_network.o -o server
    $(CC) $(CFLAGS) client.o cl_network.o -o client

【讨论】:

物有所值。

以上是关于Makefile:链接器错误[重复]的主要内容,如果未能解决你的问题,请参考以下文章

链接器错误构建GDAL VS2017

重复符号链接器错误(C++ 帮助)

创建 NSManagedObject 子类导致链接器错误重复符号

ios- Apple Mach-O 链接器错误 [重复]

从头文件中定义方法时的c ++链接器错误[重复]

将 WRL 用于 C++/CX 函数 - 链接器错误 [重复]