Я попытался запустить файл.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 в этом приложении.
Благодаря,
Похоже, ваш компилятор не может найти одну или несколько библиотек для связи. Моя догадка заключается в том, что 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) в объектные файлы. Третья строка охватывает два объектных файла в исполняемый файл.
Наконец, оба этих случая могут быть задействованы. У вас может быть несколько файлов, а также недостающие библиотеки.
grover.c
возможно, что grover.c
- это всего лишь один из множества исходных файлов, из которых состоит grover
приложения, и что простого связывания библиотеки будет недостаточно.
grover
, нет необходимости вызывать лязг.