Libquantum代码了解Makefile

时间:2014-10-06 01:06:56

标签: c++ c gcc makefile clang

我试图在这个C应用程序li​​bquantum

中运行名为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代码。

谢谢,

1 个答案:

答案 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)转换为目标文件。第三行将两个目标文件覆盖为可执行文件。

最后,这两种情况都可以参与其中。您可以拥有多个文件以及缺少的库。