我在编译和连接奇迹图书馆方面有问题。
在使用cmake时,当我试图编译和链接奇迹时,我会收到一些奇怪的有关奇迹1.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;
}我所要做的就是创建一个使用奇迹库的简单程序
发布于 2016-08-22 10:16:34
我发现了这个问题,我把它张贴在奇迹GitHub在这个链接上。
解决方案是将__int64更改为long long at mirdef.h
发布于 2016-08-16 07:47:34
您显示的错误是一个编译错误,它似乎来自Miracl报头之一。快速查看一下文档就会发现它是一个C库,而不是C++,因此它建议:
extern "C"
{
#include "miracl.h"
}也继续说
尽管在大多数情况下,最好使用第7章中描述的C++包装器类。
因此,我建议您查看一下文档的C++接口。如果我正确地理解了他们的例子,那么在miracl.h、mirdef.h和ecn.h中,您就不必在C++中包含它们。
在修复了这个问题之后,为了链接库,下面这样的使用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_directories(/path/to/libscapi/lib/Miracl/include)然后您可以使用以下内容,这允许您的程序使用不同的安装路径进行编译:
#include <iostream>
#include <big.h>https://stackoverflow.com/questions/38968917
复制相似问题