Libquantum код Понимание Makefile

0

Я попытался запустить файл.c с именем grover.c в этом приложении C libquantum

www.libquantum.de/files/libquantum-1.1.1.tar.gz

Теперь я это приложение уже содержит Makefile.in, и я могу сгенерировать исполняемые файлы, называемые shor и grover, используя команду

./configure 
make
make demos

Но когда я пытаюсь запустить grover.c, используя gcc или clan, как это

clang grover.c

Это дает мне ошибку множества неопределенных ссылок на функции.

В функции oracle': grover.c:(.text+0x50): undefined reference to quant_sigma_x' grover.c :(. Text + 0x89): неопределенная ссылка на quantum_toffoli' grover.c:(.text+0xc8): undefined reference to quant_toffoli 'grover.c :(. text + 0xf2): неопределенная ссылка на quantum_cnot' grover.c:(.text+0x137): undefined reference to quant_toffoli 'grover.c :(. text + 0x16b): неопределенная ссылка на quantum_toffoli' grover.c:(.text+0x1b0): undefined reference to quant_sigma_x'

Мне нужно знать, как удалить эту ошибку, и если я могу запустить этот c-код с именем grover.c в этом приложении.

Благодаря,

  • 1
    Я думаю, вы неправильно понимаете, что делают компиляторы. Чтобы запустить гровер, просто наберите grover , нет необходимости вызывать лязг.
  • 0
    Но когда мне нужно скомпилировать один код на C, я делаю что-то вроде clang hello.c или gcc hello.c, и он создает исполняемый файл. В этом случае мне нужно запустить этот файл grover.c. На самом деле, я хочу запустить этот файл в другом программном обеспечении, чтобы профилировать его для использования процессором.
Показать ещё 1 комментарий
Теги:
clang
makefile
gcc

1 ответ

0

Похоже, ваш компилятор не может найти одну или несколько библиотек для связи. Моя догадка заключается в том, что makefile имеет соответствующие команды для вызова компоновщика.

Если вы посмотрите на свой файл makefile, вы, вероятно, увидите некоторые команды, такие как -L -L, когда флаг -L добавляет каталог в путь поиска по умолчанию для библиотек, а флаг -L используется для обозначения библиотеки для ссылка.

например -L/lib/openGL -Lglut32 вызовет библиотеку libglut32.so.XYZ, которая находится в каталоге /lib/openGL. (это не для системы Linux, но для Mac это должно быть довольно похоже).

NBXYZ - номер версии библиотеки.

Как только вы это сделаете, могут возникнуть проблемы с загрузкой библиотек, особенно если они находятся в нестандартных местах.

------------------------ редактировать ------------------------- -

После того, как я опубликовал это письмо и отправился спать, я понял, что я пропустил потенциальный случай (и благодаря Полю Гриффитсу за то, что он тоже заметил мое упущение... научил меня делать сразу несколько вещей).

Любой, как просто компилировать простой файл, скажем hello.c, как приветствует helga.c -o hello, потому что все в одном файле, а clang автоматически связывается с библиотекой времени выполнения C.

Если в вашем случае код распространяется на несколько файлов, скажем, grover.c и file1.c, вам нужно будет:

clang -c grover.c -o grover.o
clang -c file1.c -o file1.o
clang grover.o file1.o -o grover

(или альтернативно clang grover.c file1.c -o grover)

Итак, что делают первые две строки, это перевод файлов исходного кода (grover.c и file1.c) в объектные файлы. Третья строка охватывает два объектных файла в исполняемый файл.

Наконец, оба этих случая могут быть задействованы. У вас может быть несколько файлов, а также недостающие библиотеки.

  • 1
    Также grover.c возможно, что grover.c - это всего лишь один из множества исходных файлов, из которых состоит grover приложения, и что простого связывания библиотеки будет недостаточно.
  • 0
    Могу ли я использовать эту информацию в файле make grover: libquantum.la grover.c Makefile $ (LIBTOOL) --mode = link $ (CC) $ (CFLAGS) -o grover grover.c -I./ \ -lquantum -static -lm дать соответствующую команду GCC для генерации исполняемого файла?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню