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