2012-02-23 52 views
0

我想修改一個Makefile來包含一個外部編譯的對象,但得到一個「未定義的引用」的錯誤。這是我第一次處理Makefiles - 請溫柔。修改一個makefile以包含外部編譯的對象

什麼我迄今所做的:

  • 修改main.c中包括一個新的頭文件,cudacrack.h
  • 加入runCudaImplementation()的調用到main.c中,它被定義在cudacrack.h
  • 修改了Makefile.in文件以包括cudacrack.o作爲對象依賴
  • 改性Makefile.in包括cudacrack.h作爲源文件
  • 使清潔
  • 編譯cudacrack.c有:G ++ -c cudacrack.c -o cudacrack.o
  • 的./configure
  • 化妝--debug ==詳細

我在連接時出現此錯誤:

g++ -L/usr/local/cuda/lib64/ -lcuda -lcudart -g -O2 -funroll-loops -O3 -o fcrackzip main.o crack.o cudacrack.o 
main.o: In function `main': 
$HOME/fcrackzip/fcrackzip-1.0/main.c:367: undefined reference to `runCudaImplementation' 
collect2: ld returned 1 exit status 

注意:此時「cuda」文件名只包含基本的C方法。後來我會用nvcc編譯這部分。我解釋一下我的其他問題,導致我在這裏:Building GPL C program with CUDA module

Some debug info from make: 
    Considering target file `cudacrack.h'. 
     Finished prerequisites of target file `cudacrack.h'. 
     No commands for `cudacrack.h' and no prerequisites actually changed. 
     No need to remake target `cudacrack.h'. 

..later.. 

    Considering target file `cudacrack.o'. 
     Considering target file `cudacrack.c'. 
     Finished prerequisites of target file `cudacrack.c'. 
     No need to remake target `cudacrack.c'. 
    Finished prerequisites of target file `cudacrack.o'. 
    Prerequisite `cudacrack.c' is older than target `cudacrack.o'. 
    No need to remake target `cudacrack.o'. 

需要採取什麼措施爲make主程序與cudacrack.o依賴鏈接?

+0

如果你向我們展示了你的makefile如何構建其他對象,這將會有所幫助 - 我懷疑這個問題是不兼容的。嘗試一個更簡單的案例;爲'cudacrack'寫一點測試程序(如果你還沒有的話),並確認你可以編譯並運行它。然後嘗試一箇中間情況... – Beta 2012-02-23 19:31:04

回答

1

您是否檢查過符號runCudaImplementation是否在cudacrack.o中實際定義?也許這個名字因爲使用g ++編譯它而不是gcc而被破壞了。

+0

我想你贏了:$ objdump -t cudacrack.o:0000000000000000 g F .text 000000000000000b _Z21runCudaImplementationv,$ objdump -t -C cudacrack.o:0000000000000000 g F .text 000000000000000b runCudaImplementation() \t 編輯:它使用gcc時有效。謝謝! – emulcahy 2012-02-24 23:31:22