簡體   English   中英

Libquantum代碼了解Makefile

[英]Libquantum code Understanding Makefile

我試圖在此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的oracle': grover.c:(.text+0x50): undefined reference to 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的quantum_toffoli' grover.c:(.text+0x1b0): undefined reference to '

我需要知道如何刪除此錯誤,以及是否可以在此應用程序中運行名為grover.c的C代碼。

謝謝,

看來您的編譯器找不到要鏈接的一個或多個庫。 我的直覺是, makefile具有適當的命令來調用鏈接器。

如果查看makefile,則當標志-L將目錄添加到庫的默認搜索路徑並且標志-l用於命名要鏈接的庫時,您可能會看到一些命令,例如-L -l。

例如, -L/lib/openGL -lglut32會導致在目錄/ lib / openGL中找到庫libglut32.so.XYZ。 (這不是針對Linux系統的,但對於Mac應該是相當相似的)。

NBXYZ是庫的版本號。

解決此問題后,負載查找庫可能會出現問題,尤其是在非標准位置時。

------------------------編輯------------------------- --

在我張貼完這篇論文並上床睡覺后,我意識到我錯過了一個潛在的案例(並且感謝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)轉換為目標文件。 第三行將兩個目標文件覆蓋為可執行文件。

最后,這兩種情況都可以涉及。 您可能有多個文件以及缺少的庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM