2016-08-16 203 views
1

我在編譯和鏈接miracl庫時遇到了問題。編譯和鏈接miracl C++

當我試圖編譯和鏈接MIRACL同時使用cmake我收到有關miracl.h文件中像奇怪的錯誤信息:

error: expected initializer before ‘mr_large’ 

的CMakeLists.txt:

cmake_minimum_required(VERSION 3.0) 
project(OS-PSI) 

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -maes -O3 -mavx") 

include_directories($ENV{HOME}/libscapi/lib/Miracl/include) 

find_library(
     LIBMIRACL 
     NAMES miracl 
     PATHS $ENV{HOME}/libscapi/install/lib/ 
     NO_DEFAULT_PATH 
) 


set(SOURCE_FILES main.cpp) 
add_executable(OS-PSI ${SOURCE_FILES}) 

target_link_libraries(OS-PSI ${LIBMIRACL}) 

main.cpp

#include <iostream> 
#include <miracl.h> 
#include <mirdef.h> 
#include <ecn.h> 
#include <big.h> 


int main(int argc, char *argv[]) 
{ 
    Big big1(12); 
    int partyId = atoi(argv[1]); 
    return 0; 
} 

我所要做的就是創建一個簡單的程序,使用miracl庫

+0

重做'target_link_libraries'調用。它不會幫助重複庫;-)嘗試使用find_library來查找miracl庫的正確路徑。注意:你不應該在'#include'指令中使用相對包含路徑。通過'target_include_directories'指定include目錄來解決這個問題。 –

回答

0

我發現這個問題後,我在這個link

的張貼在MIRACL GitHub上解決方法是將__int64更改爲long longmirdef.h

+0

如果你確實在ubuntu/linux上安裝了奇蹟,你能幫我安裝嗎?我跟着文檔,但無法編譯程序。 – Lucky

1

您顯示的錯誤是一個編譯錯誤,它似乎來自其中一個Miracl標題。就讓我們來看看在documentation顯示這是一個C庫不是C++,因此建議:

extern "C" 
{ 
    #include "miracl.h" 
} 

也要去上說

雖然在大多數情況下,最好使用說明的C++包裝類在第7章。

所以我建議你看看C++接口的documentation。如果我正確理解他們的例子,看起來你不需要在C++中包含miracl.hmirdef.hecn.h

後,你固定的問題,用於鏈接庫,像下面這樣使用find_library()應該工作,更新路徑是絕對的和更新/path/to/libscapi...您的實際路徑:

find_library(
    LIBMIRACL 
    NAMES miracl 
    PATHS /path/to/libscapi/install/lib/ 
    NO_DEFAULT_PATH 
) 

然後,您可以將您的庫使用:

target_link_libraries(OS-PSI ${LIBMIRACL}) 

你也可以治好你包括通過將Miracl/include目錄include路徑:

include_directories(/path/to/libscapi/lib/Miracl/include) 

,然後你可以使用下面的,它允許你的程序有不同的安裝路徑編譯:

#include <iostream> 
#include <big.h> 
+0

更改並刪除miracl.h mirdef.h和ecn.h後,我遇到了同樣的問題。 – liorko

+0

@liorko在發佈的代碼和CMakeLists.txt中沒有問題。也許你應該直接詢問miracl tracker https://github.com/miracl/MIRACL/issues? –

+0

感謝您的諮詢!我會問那裏 – liorko