Question

So I am using FFTW 3.3.3. While trying to invoke make from the Makefile, I encounter this problem:

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

I previously compiled my code directly with:

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

and it worked just fine. Here is my Makefile, in case it's needed:

    #                     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

Any help would be greatly appreciated!

Was it helpful?

Solution

Running make should show you the commands it runs, so you can compare that to the command you run by hand. But this

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

Should rather make the libraries to link in come after the files to compile:

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

You can't use $VARIABLE_NAME in a makefile for shell variables, the syntax in a makefile is $(VARIABLE_NAME), so

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

Make sure the TACC_FFTW3_LIB and TACC_FFTW3_INC are exported from the shell too. (Note that you spelled TACC_FFTW3_LI wrong)

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top