C++ 编译和链接miracl c++;

C++ 编译和链接miracl c++;,c++,cmake,C++,Cmake,我在编译和链接miracl库时遇到问题 当我试图在使用cmake时编译和链接miracl时,我会收到关于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

我在编译和链接miracl库时遇到问题

当我试图在使用cmake时编译和链接miracl时,我会收到关于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;
}
#包括
#包括
#包括
#包括
#包括
int main(int argc,char*argv[])
{
大比格1(12);
int partyId=atoi(argv[1]);
返回0;
}

我所要做的就是使用miracl库创建一个简单的程序

您显示的错误是一个编译错误,它似乎来自一个miracl头。一个快速的查看显示它是一个C库而不是C++,所以它推荐:

extern "C"
{
     #include "miracl.h"
}
还接着说

尽管在大多数情况下,最好使用第7章中描述的C++包装类。 所以我建议你看一下C++界面。如果我正确地理解了他们的例子,看起来你就不必包含C++中的<代码> MIRAL.H./COD>,<代码> MIDEFF。p> 修复该问题后,对于链接库,应使用以下类似的方法,将路径更新为绝对路径,并将

/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_directories(/path/to/libscapi/lib/Miracl/include)
然后,您可以使用以下选项,这允许您的程序使用不同的安装路径进行编译:

#include <iostream>
#include <big.h>
#包括
#包括

我在miracl GitHub上发布后发现了这个问题


解决方案是在
mirdef.h

处将
\uu int64
更改为
long
,重新调用
目标链接库。这无助于重复库;-)尝试使用
find_library
查找miracl库的正确路径。旁注:切勿在
#include
指令中使用相对包含路径。通过
target\u include\u directories
指定include directories来解决这个问题。在更改并删除miracl.h mirdef.h和ecn.h后,我遇到了同样的问题。@liorko在发布的代码和CMakeLists.txt中看不到任何问题。也许你应该直接向miracl追踪器询问?谢谢你的建议!我会问你是否在ubuntu/linux上安装了miracle,你能帮我安装吗?我遵循文档,但无法编译程序。