我试图在这个C应用程序libquantum
中运行名为grover.c的.c文件www.libquantum.de/files/libquantum-1.1.1.tar.gz
现在我的这个应用程序已经包含一个Makefile.in,我可以使用命令生成名为shor和grover的可执行文件
./configure
make
make demos
但是当我尝试使用像这样的gcc或clan运行grover.c时
clang grover.c
它给了我许多未定义函数引用的错误。
在函数oracle':
grover.c:(.text+0x50): undefined reference to
quantum_sigma_x'中
grover.c :(。text + 0x89):对quantum_toffoli'
grover.c:(.text+0xc8): undefined reference to
quantum_toffoli'的未定义引用
grover.c :(。text + 0xf2):对quantum_cnot'
grover.c:(.text+0x137): undefined reference to
quantum_toffoli'的未定义引用
grover.c :(。text + 0x16b):对quantum_toffoli'
grover.c:(.text+0x1b0): undefined reference to
quantum_sigma_x'的未定义引用
我需要知道如何删除此错误以及是否可以在此应用程序中运行名为grover.c的c代码。
谢谢,
答案 0 :(得分:0)
看起来你的编译器找不到一个或多个要链接的库。我的预感是makefile
具有调用链接器的适当命令。
如果查看makefile,可能会看到一些命令,如-L -l,
当标志-L
将目录添加到库的默认搜索路径时,标志-l
用于命名要链接的库。
例如-L/lib/openGL -lglut32
会导致库libglut32.so.X.Y.Z,它位于/ lib / openGL目录中。 (这不适用于Linux系统,但对Mac来说应该非常相似)。
N.B。 X.Y.Z是库的版本号。
一旦解决了这个问题,可能会出现查找库的负载问题,特别是如果它们位于非标准位置。
------------------------ edit ---------------------- ----
在我发布这个并上床睡觉后,我意识到我错过了一个潜在的案例(感谢Paul Griffiths也注意到我的遗漏......教我一次做多件事。)
任何如何,只是编译一个简单的文件,比如说hello.c,因为clang hello.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)转换为目标文件。第三行将两个目标文件覆盖为可执行文件。
最后,这两种情况都可以参与其中。您可以拥有多个文件以及缺少的库。