좋아, 이제이 오류에 대한 여러 가지 사례를 살펴 보았으며 지금까지이 문제의 원인을 정확히 파악하지 못했습니다. 난독증, 사과를 하더니 얼굴을 빤히 보았습니다.) 나는 이런 문제에 대한 언급을 계속 찾고 있습니다 : Undefined reference to main - collect2: ld returned 1 exit status과 QtCreator build returns collect2: ld returned exit status 1 그러나 이러한 유형의 경우는 적합하지 않은 것 같습니다.링크 오류 (collect2 : ld가 1을 반환했습니다.)
메시지를 편집 한 후 자동으로 메시지에 다시 서명하는 프로그램을 작성 중입니다. 서명 함수는 몇 가지 정보를 받아서 md5 (기존의 요구 사항을 알고 있음)로 해시 한 다음 Base64 (const unsigned char * 및 메시지의 전체 크기를 통해 일련의 바이트를 사용)로 출력을 인코딩합니다.
MD5에 대한 Crypto ++ 라이브러리를 처음 시도했지만 다른 해시 및 프로토콜에 대한 확장 기능을 제공합니다. 링크 단계에서 많은 수의 정의되지 않은 참조 오류가 발생한 후 온라인에서 찾은 다른 md5 구현을 시도했습니다. 이것은 하나의 연결 오류가 두 개만 제공하지만, 나는 그들이 두 번째 라이브러리와 함께 게시 공간을 절약 할 수 있도록 동일한 이유에서 발생할 수 있다고 생각합니다.
메시지 서명에 대한 내 C++ 코드의 조각 :
이string createMessageSignature(string input)
{
//byte digest[ CryptoPP::MD5::DIGESTSIZE ];
//CryptoPP::MD5().CalculateDigest(digest, (byte*) input.c_str(), input.length());
//cout << "md5 signature: " << digest << endl;
//string encodedDigest = base64_encode(digest, 32);
int size = md5(input).length();
string stringDigest = md5(input);
const unsigned char* digest = reinterpret_cast<const unsigned char*>(stringDigest.c_str());
cout << "md5 signature hash: " << digest << endl;
string encodedDigest = base64_encode(digest, size);
cout << "signature base64 encoded: " << encodedDigest << endl;
return encodedDigest;
}
내가 현재 사용하고있어 MD5 라이브러리는 여기에 있습니다 : http://www.zedwood.com/article/121/cpp-md5-function (I 어쩌면에는 OpenSSL을 ++ 암호화로 이동 결국, 또는 할지라도) . (또한 리눅스 환경에서 GCC에서 발생하지만, Win7에에는 MinGW를 사용) 링커에서
오류 메시지 :
C:\Users\j********\Desktop\MessageSigner>C:/MinGW/bin/g++ -o MessageSigner.exe M
essageSigner.cpp
C:\Users\J****~1\AppData\Local\Temp\ccLejcEo.o:MessageSigner.cpp:(.text+0xc54):
undefined reference to `md5(std::string)'
C:\Users\J****~1\AppData\Local\Temp\ccLejcEo.o:MessageSigner.cpp:(.text+0xc9f):
undefined reference to `md5(std::string)'
collect2: ld returned 1 exit status
어떤 생각? 모든 것이 정의되어 있고 코드가 컴파일됩니다. 필자는 링커 오류를 디버깅하는 데 많은 경험을 한 적이 없었습니다. 만
... 지미
Doh, 너무 바보입니다. 여러 소스 파일과 함께 IDE를 사용하는 데 너무 익숙해졌습니다. 이제 커맨드 라인이있는 제한된 컴퓨터이므로 여분의 cpp 파일을 매개 변수로 추가하는 것을 잊었습니다. 하지만 처음 시작했을 때 커맨드 라인에서 g ++을 사용했을 때 링커를 다루는 대신 cpp 파일을 컴파일 할 때 오류가 발생한다는 것을 기억합니다. 내 나쁜 기억 일 뿐이야. – DaJJHman