gpt4 book ai didi

c - ld : can't open output file for writing: bin/s, errno=2 架构 x86_64

转载 作者:太空狗 更新时间:2023-10-29 17:22:02 25 4
gpt4 key购买 nike

我正在尝试在 OSX El Capitan 上编译我的代码。这是我的生成文件

TARGET   = proj_name

CC = gcc
# compiling flags
CFLAGS = -std=c99 -Wall -I.

LINKER = gcc -o
# linking flags
LFLAGS = -Wall -I. -lm

SRCDIR = src
OBJDIR = obj
BINDIR = bin

SOURCES := $(wildcard $(SRCDIR)/*.c)
INCLUDES := $(wildcard $(SRCDIR)/*.h)
OBJECTS := $(SOURCES:$(SRCDIR)/%.c=$(OBJDIR)/%.o)
rm = rm -f


$(BINDIR)/$(TARGET): $(OBJECTS)
@$(LINKER) $@ $(LFLAGS) $(OBJECTS)
@echo "Linking complete!"

$(OBJECTS): $(OBJDIR)/%.o : $(SRCDIR)/%.c
@$(CC) $(CFLAGS) -c $< -o $@
@echo "Compiled "$<" successfully!"

.PHONEY: clean
clean:
@$(rm) $(OBJECTS)
@echo "Cleanup complete!"

.PHONEY: remove
remove: clean
@$(rm) $(BINDIR)/$(TARGET)
@echo "Executable removed!"

我在 El Capitan 上编译时不断收到以下错误

ld: can't open output file for writing: bin/proj, errno=2 for architecture x86_64

我知道这是一个链接器问题,但如果有人能帮我修改 Makefile,那真的很有帮助。

最佳答案

Errno 2 的意思是(谷歌搜索类似 errno list 的东西):

#define ENOENT       2  /* No such file or directory */

bin/proj 是相对路径。

查看 Makefile,最可能的原因似乎是 bin 目录根本不存在。如果 ld 不存在,则不会尝试创建它。要修复,请添加

mkdir -p $(BINDIR)

$(LINKER) 行之前(-p 开关允许创建一个路径,如果它不存在,在这种情况下,如果 bin 已经存在)。

旁注:相对路径的另一个常见原因是,当 ld 运行时,工作目录不是您认为的那样。在 $(LINKER) 命令之前添加类似 pwd 的命令将有助于解决此问题。但是看Makefile,估计不是这个原因。

关于c - ld : can't open output file for writing: bin/s, errno=2 架构 x86_64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32984058/

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