/ usr / bin / ld找不到-lfftw3?

时间:2013-12-14 02:42:12

标签: c makefile fftw

所以我使用的是FFTW 3.3.3。在尝试从Makefile调用make时,我遇到了这个问题:

    /usr/bin/ld: cannot find -lfftw3
    collect2: ld returned 1 exit status
    make: *** [fftw_ex] Error 1

我之前使用以下代码编译了我的代码:

    gcc -o fftw_ex fftw_ex.c -I$TACC_FFTW3_INC -L$TACC_FFTW3_LIB -lfftw3

它运作得很好。这是我的Makefile,如果需要的话:

    #                     RULES
    EXEC := fftw_ex
    SRC := $(wildcard *.c)
    OBJ := $(SRC)
    #                     OPERATIONS
    CC := gcc
    CFLAGS := -O3 -I$TACC_FFTW3_INC
    LDFLAGS := -L$TACC_FFTW3_LI
    LDLIBS := -lfftw3

    $(EXEC): $(OBJ)
    $(CC) $(LDFLAGS) $(LDLIBS) -g -o $@ $^

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

    #                   PHONY TARGETS
    .PHONY: clean

    clean:
            @echo Cleaning...;rm -rf *.o fftw_ex

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:3)

运行make应该显示它运行的命令,因此您可以将其与手动运行的命令进行比较。 但是这个

  $(CC) $(LDFLAGS) $(LDLIBS) -g -o $@ $^

应该在要编译的文件之后使库链接:

   $(CC) -g -o $@ $^ $(LDFLAGS) $(LDLIBS) 

你不能在makefile中使用$ VARIABLE_NAME来获取shell变量,makefile中的语法是$(VARIABLE_NAME),所以

CFLAGS := -O3 -I$(TACC_FFTW3_INC)
LDFLAGS := -L$(TACC_FFTW3_LIB)

确保来自shell的TACC_FFTW3_LIB和TACC_FFTW3_INC都是exported。 (注意拼写错误的TACC_FFTW3_LI)