2017-03-29 6 views
1

기본 블록 체인 시뮬레이션을 만들기 위해 OpenSSL의 EC 암호화 및 ECDSA 기능을 활용하려고하지만 주요로드 블록을 실행했습니다. Code :: Blocks IDE를 사용하고 있으며 여기에있는 64 비트 바이너리를 사용하여 OpenSSL을 설치했습니다 : https://slproweb.com/products/Win32OpenSSL.html. 링커 설정에서 코드의 MinGW : 정적 OpenSSL 라이브러리를 연결하지 않는 블록

, 나는

검색 디렉토리> 컴파일러에서

openssl.lib \ lib에는 OpenSSL을-Win64를 \을 추가, 내가 OpenSSL을-Win64를 \는 검색 디렉토리> 링커에서

을 포함 추가, 나는 [email protected]로 추가 Win32 \ lib

그러나 컴파일 할 때 사용하려고하는 모든 OpenSSL 함수에 대해 "(함수 이름)에 대한 정의되지 않은 참조"오류가 발생합니다. 그러나 컴파일러는 EC_KEY와 같은 새로운 데이터 형식을 인식하므로 헤더 파일을 성공적으로 포함하고있는 것으로 보입니다. 링크 오류가 의심 스럽지만 위와 같이 연결된 링크와 정적 라이브러리가 있기 때문에 무엇이 잘못 될 수 있는지 잘 모르겠습니다. 내가 정적 라이브러리를 연결하는 새로운 해요 이후로 난 그냥 여기에 간단하게 뭔가를 누락 바라고 있어요

mingw32-g++.exe -LD:\OpenSSL-Win64\lib -LD:\OpenSSL-Win64\include -LD:\OpenSSL-Win64 -o bin\Debug\BlockchainSim.exe obj\Debug\main.o  obj\Debug\src\Block.o obj\Debug\src\BlockchainNode.o obj\Debug\src\Transaction.o  obj\Debug\src\Valuable.o D:\OpenSSL-Win64\lib\openssl.lib 
obj\Debug\src\BlockchainNode.o: In function `ZN14BlockchainNodeC2Ei': 
F:/School/Barrett/BlockchainSim/src/BlockchainNode.cpp:18: undefined reference to `EC_KEY_new_by_curve_name' 
F:/School/Barrett/BlockchainSim/src/BlockchainNode.cpp:21: undefined reference to `BN_new' 
F:/School/Barrett/BlockchainSim/src/BlockchainNode.cpp:22: undefined reference to `EC_KEY_set_private_key' 
F:/School/Barrett/BlockchainSim/src/BlockchainNode.cpp:25: undefined reference to `BN_CTX_new' 
F:/School/Barrett/BlockchainSim/src/BlockchainNode.cpp:26: undefined reference to `BN_CTX_start' 
F:/School/Barrett/BlockchainSim/src/BlockchainNode.cpp:28: undefined reference to `EC_KEY_get0_group' 
F:/School/Barrett/BlockchainSim/src/BlockchainNode.cpp:29: undefined reference to `EC_POINT_new' 
F:/School/Barrett/BlockchainSim/src/BlockchainNode.cpp:30: undefined reference to `EC_POINT_mul' 
F:/School/Barrett/BlockchainSim/src/BlockchainNode.cpp:31: undefined reference to `EC_KEY_set_public_key' 
F:/School/Barrett/BlockchainSim/src/BlockchainNode.cpp:34: undefined reference to `EC_POINT_free' 
F:/School/Barrett/BlockchainSim/src/BlockchainNode.cpp:35: undefined reference to `BN_CTX_end' 
F:/School/Barrett/BlockchainSim/src/BlockchainNode.cpp:36: undefined reference to `BN_CTX_free' 
F:/School/Barrett/BlockchainSim/src/BlockchainNode.cpp:37: undefined reference to `BN_clear_free' 
obj\Debug\src\BlockchainNode.o: In function `ZN14BlockchainNodeD2Ev': 
F:/School/Barrett/BlockchainSim/src/BlockchainNode.cpp:42: undefined reference to `EC_KEY_free' 
collect2.exe: error: ld returned 1 exit status 
Process terminated with status 1 (0 minute(s), 0 second(s)) 
15 error(s), 0 warning(s) (0 minute(s), 0 second(s)) 

:

여기 내 빌드 로그입니다. 비슷한 문제는 명령을 컴파일하는 옵션을 추가하여 해결할 수 있지만 Code :: Blocks를 사용하고 OpenSSL을 정적 라이브러리로 연결하기 때문에 여기에 적용되는지 확실하지 않습니다. 어떤 도움이라도 대단히 감사합니다.

+0

동일한 컴파일러와 플래그를 사용하여 openssl.lib 등을 컴파일 했습니까? –

+0

아니요.하지만 사용 된 이진 파일의 특성으로 인해 필요하지 않았습니다. 기본적으로 OpenSSL을 설치하고 컴파일합니다. –

답변

1

알아 냈어. 문제는 내가 C :/MinGW 폴더가 없다는 것입니다 (Code :: Blocks는 MinGW를 자체 디렉토리에 설치했기 때문에). 내가 사용하는 바이너리가 기존 컴파일러를 탐지하고 발견 한 내용에 따라 다르게 라이브러리를 컴파일하려고 시도한 것 같습니다.

기본 경로 (C :/MinGW)와 함께 기본 MinGW (MSYS가있는 경우)를 설치 한 다음 원본 경로와 기본 경로에 연결된 32 비트 바이너리 OpenSSL을 다시 설치하여 문제를 해결했습니다. (C :/OpenSSL-Win32). 이렇게하면 C :/OpenSSL-Win32/lib 폴더 내에 새로운 MinGW 폴더가 생겨서 링커 검색 디렉토리에 포함됩니다.

+0

동일한 문제가 발생했습니다. 작동하는 전체 명령을 추가 할 수 있습니까? – Vixxs