gpt4 book ai didi

c++ - 编译错误/usr/bin/ld : cannot open output file bin/server: No such file or directory

转载 作者:行者123 更新时间:2023-11-30 02:42:04 26 4
gpt4 key购买 nike

我正在尝试使用 ubuntu 中的 makefile 编译我的 C 程序。但我不知道它有什么问题。还有一个我无法修复的错误。

gcc -Wall -I. -pthread -ggdb -g -O0  -o bin/server server/message_queue.o server/client_thread.o server/server.o server/file.o server/datatypes.o common/datatypes.o common/error.o common/socket.o
/usr/bin/ld: cannot open output file bin/server: No such file or directory
collect2: error: ld returned 1 exit status
make: *** [bin/server] Error 1

这是一个生成文件:

CC=gcc
CFLAGS=-Wall -I. -pthread -ggdb -g -O0
SERVER_OBJ=\
server/message_queue.o \
server/client_thread.o \
server/server.o \
server/file.o \
server/datatypes.o

COMMON_OBJ=\
common/datatypes.o \
common/error.o \
common/socket.o

CLIENT_OBJ=\
client/send_thread.o \
client/recv_thread.o \
client/terminal_thread.o \
client/client.o \
client/datatypes.o

BIN=bin

all: server client

server: $(BIN)/server
client: $(BIN)/client

$(BIN)/server: $(SERVER_OBJ) $(COMMON_OBJ)
$(CC) $(CFLAGS) $(SERVER_CFLAGS) -o $@ $^

$(BIN)/client: $(CLIENT_OBJ) $(COMMON_OBJ)
$(CC) $(CFLAGS) $(CLIENT_CFLAGS) -o $@ $^

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

clean:
rm -f server

可能是我忘了安装 linux 的东西?

最佳答案

您的问题很简单:您在链接可执行文件之前没有检查目录 bin 是否存在。另外,您的 makefile 有点乱。那一个应该做你想做的:

BIN         :=  bin
CLIENT := $(BIN)/client
SERVER := $(BIN)/server

COMMON_SRC := $(wildcard common/*.c)
COMMON_OBJ := $(COMMON_SRC:.c=.o)

CLIENT_SRC := $(wildcard client/*.c)
CLIENT_OBJ := $(CLIENT_SRC:.c=.o)

SERVER_SRC := $(wildcard server/*.c)
SERVER_OBJ := $(SERVER_SRC:.c=.o)

CPPFLAGS := -I. -pthread
CFLAGS := -Wall -ggdb -g -O0
LDFLAGS := -pthread

.PHONY: all client server clean fclean

all: client server

client: $(CLIENT)
server: $(SERVER)

$(CLIENT): $(COMMON_OBJ) $(CLIENT_OBJ) | $(BIN)
$(CC) $(LDFLAGS) $^ $(LDLIBS) -o $@

$(SERVER): $(COMMON_OBJ) $(SERVER_OBJ) | $(BIN)
$(CC) $(LDFLAGS) $^ $(LDLIBS) -o $@

$(BIN):
mkdir $@

clean:
@$(RM) -rv $(BIN) $(COMMON_OBJ) $(CLIENT_OBJ) $(SERVER_OBJ)

关于c++ - 编译错误/usr/bin/ld : cannot open output file bin/server: No such file or directory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27471676/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com