2012-02-23 7 views
0

外部でコンパイルされたオブジェクトをインクルードするようにMakefileを修正しようとしていますが、 "未定義の参照"エラーが発生しています。 Makefileを扱ったのは初めてのことです。穏やかにしてください。定義されて外部でコンパイルされたオブジェクトを含むようにメークファイルを変更する

  • 修正main.cの新しいヘッダーファイルをインクルードするために、cudacrack.h
  • 追加runCudaImplementation()の呼び出しがmain.cのために、私がこれまで何をやったか

  • cudacrack.hでオブジェクトの依存関係
  • がきれい
  • を作る
  • ソースファイルとしてcudacrack.hを含めるようにMakefile.inを修正としてcudacrack.oが含まれるようにMakefile.inファイルを修正G ++ -c cudacrack.c -o cudacrack.o
  • は./configure
  • メイク--debug ==私はリンク時にこのエラーが出る冗長

:と

  • コンパイルcudacrack.c

    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でコンパイルします。 cudacrack.o依存して、メインプログラムをリンクするメイクのために発生する必要がどのような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'. 
    

    :私はここに私を導いた私の他の質問には、もう少し説明しますか?

  • +0

    あなたのメイクファイルが他のオブジェクトをどのように構築しているかを示してくれれば助かります。問題はそこに互換性がないと思われます。よりシンプルなケースを試してみてください。 'cudacrack'のための小さなテストルーチンを書いて(あなたがまだいなければ)、ビルドして実行できることを確認してください。そして、中央のケースを試してみてください... – Beta

    答えて

    1

    シンボルrunCudaImplementationが実際にcudacrack.oに定義されているかどうかを確認しましたか?おそらくgccの代わりにg ++を使ってコンパイルするので、名前が変わったかもしれません。

    +0

    は、私はあなたが勝つと思う:$ objdumpの-t cudacrack.o:0000000000000000グラムFの.text 000000000000000b _Z21runCudaImplementationv、$ objdumpは-t -C cudacrack.o:0000000000000000グラムFの.text 000000000000000b runCudaImplementation() \t 編集:gccを使用すると動作します。ありがとうございました! – emulcahy

    関連する問題