2013-12-14 117 views
0

所以我使用FFTW 3.3.3。雖然試圖在Makefile中調用化妝,我遇到這樣的問題:/usr/bin/ld找不到-lfftw3?

/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 [email protected] $^ 

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

    #     PHONY TARGETS 
    .PHONY: clean 

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

任何幫助將不勝感激!

回答

3

運行make應該會顯示它運行的命令,因此您可以將其與手動運行的命令進行比較。 但這

$(CC) $(LDFLAGS) $(LDLIBS) -g -o [email protected] $^ 

而應使庫中來的文件後,編譯鏈接:

$(CC) -g -o [email protected] $^ $(LDFLAGS) $(LDLIBS) 

你不能在makefile中使用$ VARIABLE_NAME的shell變量,語法makefile文件是$(VARIABLE_NAME),所以

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

確保TACC_FFTW3_LIB和TACC_FFTW3_INC是從殼太exported。 (請注意,您拼寫TACC_FFTW3_LI錯誤)

+0

編譯命令行中的目標文件(庫)的順序有所不同。 @nos +1 –

+0

謝謝!我對使用Makefiles很陌生(這是我的教授需要完成的任務)。對於拼寫錯誤感到抱歉,我不能從終端窗口全部複製它。再次感謝! –