2014-01-30 189 views
0

我已經在我的Ubuntu上下載並安裝了NTL庫。我目前使用gedit編寫我的程序,並在我的程序中包含了這個ZZ.h標題。這是我如何編譯我的程序在終端:- g++ keygen.cpp -o keygen -I ../include -L ../lib -lntl -lm找不到NTL頭文件

我敢肯定,這條線是正確的,但不知什麼原因,我得到以下錯誤:

KeyGen.cpp:9:20: error: NTL/ZZ.h: No such file or directory 
KeyGen.cpp:15: error: expected constructor, destructor, or type conversion before ‘int’ 

的解決方案似乎非常簡單對我說:這是直接添加NTL庫到我的程序文件夾。我只是這樣做了,但我仍然得到同樣的錯誤。

+0

實際上,您在g ++用於標頭的路徑中是否有NTL/ZZ.h標頭。嘗試運行'cpp -I ../include -x C++ -v'來獲取包含目錄的整個列表 – user3159253

+0

@ user3159253所以我有義務在include目錄中看到NTL/ZZ.h? –

+0

你當然可以。在include目錄之一中應該有一個名爲NTL的子目錄,並在其中包含可讀的ZZ.h。 – user3159253

回答

1

如果你在你的Ubuntu如下不需要NTL的最新版本(6.0.0)的版本,你可以這樣做:

 
[email protected]:~$ sudo apt-get install libntl-dev 
Reading package lists... Done 
Building dependency tree  
Reading state information... Done 
The following extra packages will be installed: 
    libntl-5.4.2 
The following NEW packages will be installed: 
    libntl-5.4.2 libntl-dev 
0 upgraded, 2 newly installed, 0 to remove and 112 not upgraded. 
Need to get 2,035 kB of archives. 
After this operation, 7,016 kB of additional disk space will be used. 
Do you want to continue [Y/n]? y 
Get:1 http://ftp.de.debian.org/debian/ squeeze/main libntl-5.4.2 amd64 5.4.2-4 [767 kB] 
Get:2 http://ftp.de.debian.org/debian/ squeeze/main libntl-dev amd64 5.4.2-4 [1,268 kB] 
Fetched 2,035 kB in 2s (1,017 kB/s) 
Selecting previously deselected package libntl-5.4.2. 
(Reading database ... 59184 files and directories currently installed.) 
Unpacking libntl-5.4.2 (from .../libntl-5.4.2_5.4.2-4_amd64.deb) ... 
Selecting previously deselected package libntl-dev. 
Unpacking libntl-dev (from .../libntl-dev_5.4.2-4_amd64.deb) ... 
Can not write log, openpty() failed (/dev/pts not mounted?) 
Setting up libntl-5.4.2 (5.4.2-4) ... 
Setting up libntl-dev (5.4.2-4) .. 
[email protected]:~$ 

之後所有的開發頭部完整的編譯NTL庫安裝你的系統,你可以用它編譯你的程序,而不需要任何額外的-I < path>。

如果您需要發行版本較新的版本(檢查http://packages.ubuntu.com/en/source/trusty/ntl),您可以嘗試自己構建庫包。

+0

我試過你的方式,但終端告訴我,該包無法找到。 –

+0

嗯你有什麼Ubuntu的? – user3159253

+0

那麼,你可以運行'apt-cache policy'來檢查存儲庫的使用情況。確保'universe'版本庫開啓(輸出中的第三個字段,如'saucy/universe'或'raring/universe',然後嘗試執行'apt-cache search libntl-dev' – user3159253

0

您試圖編譯和輸出可執行文件的問題似乎是編譯器無法在獲取對象 .o文件後鏈接必要的庫。

許多人經常通過首先編譯g++ -c,然後通過鏈接可執行文件庫g++ -o來分離兩個階段來測試故障點。儘管-Wall開關並不總是有效,但在編譯過程中試圖爲您提供儘可能多的信息也很有幫助。

檢查this網頁。至於使用不同的開關鏈接庫嘗試this網頁。

我不確定它是否是一個錯字;但我不知道是否在開關和目錄之間的空間:
-I ../include-L ../lib
是問題。

Icreated a folder called 'include' within the .cpp folder and included the NTL library in that folder already

但是你的編譯命令說:

g++ keygen.cpp -o keygen -I ../include -L ../lib -lntl -lm. 

在我看來,你的意思是:

g++ keygen.cpp -o keygen -I ./include -L ../lib -lntl -lm. 
#       ^^^^^^^^^ 

因爲..上升一個目錄

+0

那麼,他還沒有達到鏈接階段。 'KeyGen.cpp:9:20:error:NTL/ZZ.h:沒有這樣的文件或目錄'是來自編譯器的消息,更確切地說,來自預處理器 – user3159253

+0

@ user3159253,感謝您的更正。 – user3249235

0

您的評論說: 。