ld:无法打开输出文件进行写入:bin/s,errno = 2,用于体系结构x86_64

Tho*_*s G 6 c macos gcc

我正在尝试在OSX El Capitan上编译我的代码.这是我的Makefile

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!"
Run Code Online (Sandbox Code Playgroud)

在El Capitan上编译时,我一直收到以下错误

ld: can't open output file for writing: bin/proj, errno=2 for architecture x86_64
Run Code Online (Sandbox Code Playgroud)

我理解它是一个链接器问题,但如果有人可以帮我修改Makefile,那真的会有所帮助.

hyd*_*yde 7

Errno 2意味着(谷歌搜索errno列表):

#define ENOENT       2  /* No such file or directory */
Run Code Online (Sandbox Code Playgroud)

bin/proj 是相对路径.

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

mkdir -p $(BINDIR)
Run Code Online (Sandbox Code Playgroud)

$(LINKER)在行之前(-p如果路径不存在,则开关允许创建路径,在这种情况下,如果bin已经存在,则阻止错误).

旁注:相对路径的另一个常见原因是,工作目录不是您认为的,ld运行时.添加命令pwd之前的$(LINKER)命令将有助于对此进行故障排除.但是看看Makefile,这可能不是这里的原因.