Libquantum代码理解Makefile

Libquantum code Understanding Makefile

本文关键字:Makefile 代码 Libquantum      更新时间:2023-10-16

我试图在这个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_sima_x'的引用

我需要知道如何删除这个错误,以及我是否可以在这个应用程序中运行这个名为grover.c的c代码。

谢谢,

编译器似乎找不到一个或多个要链接的库。我的直觉是makefile有适当的命令来调用链接器。

如果你查看你的makefile,你可能会看到一些命令,比如-L-L,当标志CCD_ 6将目录添加到库的默认搜索路径并且标志-l用于命名要链接的库时。

例如-L/lib/openGL -lglut32将导致库libglut32.so.X.Y.Z,该库位于/lib/openGL目录中。(这不是针对Linux系统的,但对于Mac来说应该相当类似)。

N.B.X.Y.Z是库的版本号。

一旦解决了这个问题,查找库的负载可能会出现问题,尤其是当库位于非标准位置时。

------------------------编辑-----------------------

在我发布了这篇文章并上床睡觉后,我意识到我错过了一个潜在的案例(感谢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)转换为对象文件。第三行将两个对象文件合并为一个可执行文件。

最后,这两种情况都可能涉及。您可能有多个文件以及缺少的库。