Модификация make-файла для включения внешне скомпилированных объектов - PullRequest
0 голосов
/ 23 февраля 2012

Я пытаюсь изменить Makefile, чтобы включить внешне скомпилированный объект, но получаю ошибку «неопределенная ссылка».Это первый раз, когда я имел дело с Makefiles - пожалуйста, будьте осторожны.

Что я сделал до сих пор:

  • Изменен файл main.c для добавления нового файла заголовка,cudacrack.h
  • Добавлен вызов runCudaImplementation () в main.c, который определен в cudacrack.h
  • Изменен файл Makefile.in для включения cudacrack.o в качестве зависимости объекта
  • Изменен Makefile.in для включения cudacrack.h в качестве исходного файла
  • make clean
  • Скомпилированный cudacrack.c с помощью: g ++ -c cudacrack.c -o cudacrack.o
  • . / Configure
  • make --debug == verbose

Я получаю эту ошибку при связывании:

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.Я объясню немного больше на моем другом вопросе, который привел меня здесь: Сборка программы на GPL C с модулем CUDA

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 зависимость?

1 Ответ

1 голос
/ 24 февраля 2012

Вы проверили, действительно ли символ runCudaImplementation определен в cudacrack.o? Возможно, имя искажено, потому что вы используете g ++ для его компиляции вместо gcc.

...