编译错误 /usr/bin/ld: 无法打开输出文件 bin/server: 没有这样的文件或目录
Posted
技术标签:
【中文标题】编译错误 /usr/bin/ld: 无法打开输出文件 bin/server: 没有这样的文件或目录【英文标题】:Compiling Error /usr/bin/ld: cannot open output file bin/server: No such file or directory 【发布时间】:2014-12-14 16:58:52 【问题描述】:我正在尝试在 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 安装 somthing 了吗?
【问题讨论】:
你有目录“bin”吗? 是的,但在系统文件中 什么?您的 makefile 假设在与“client”、“server”和“common”相同的父目录中有一个“bin”文件夹,基于BIN=bin
是的!谢谢你。这有帮助。
【参考方案1】:
您的问题很简单:在链接可执行文件之前,您没有检查目录 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)
【讨论】:
以上是关于编译错误 /usr/bin/ld: 无法打开输出文件 bin/server: 没有这样的文件或目录的主要内容,如果未能解决你的问题,请参考以下文章
无法编译第一个 opencv 程序,'/usr/bin/ld: 找不到 -lcv'
编译错误:/ usr / bin / ld:找不到-lclntsh
gcc 错误“/usr/bin/ld: 找不到 -lstdc++”