我在C++上完成了一些項目,我需要爲Windows XP和更高版本編譯它。無法將C++項目與openssl靜態庫鏈接
這是我的RsaEncryptor
類的頭文件(我認爲無論在這裏發佈源代碼,因爲我確定100%可以正常工作,但是如果需要的話,我可以這樣做):
#ifndef RSAENCRYPTOR_H_
#define RSAENCRYPTOR_H_
#include <stdexcept>
#include <openssl/rsa.h>
#include <openssl/engine.h>
#include <openssl/pem.h>
// One of this paddings can be used
//#define PADDING RSA_PKCS1_OAEP_PADDING
#define PADDING RSA_PKCS1_PADDING
//#define PADDING RSA_NO_PADDING
class RsaEncryptor {
private:
RSA* publicKey;
RSA* privateKey;
public:
RsaEncryptor() {
publicKey = nullptr;
privateKey = nullptr;
}
~RsaEncryptor() {
if (this->publicKey)
RSA_free(this->publicKey);
if (this->privateKey)
RSA_free(this->privateKey);
}
size_t GetCipherBytesCount() {
return 172; //is default for 1024 bit key length
}
void SetPublicKeyFromString(const std::string& content);
void SetPrivateKeyFromString(const std::string& content);
std::string Encrypt(const std::string& plainData);
std::string Decrypt(const std::string& cipherData);
};
#endif /* RSAENCRYPTOR_H_ */
我使用最新版本的Eclipse Neon
進行C++開發,在Windows 10 x64
機器上。
而且我已閱讀this:
(...) you will need to configure with
no-async
when building OpenSSL 1.1.0 and above for Windows XP or Vista
,我被following指令制導。
我做了什麼:
安裝
Ubuntu 17.04 x64
虛擬盒裏面Windows 10 x64
下。從Ubuntu
OpenSSL庫的
下載最新版本安裝mxe和所有要求(但不能與它編譯和我決定使用
mingw32
)通過
[email protected]:/home/user# apt-get install gcc-mingw-w64-i686
安裝
解壓OpenSSL庫
/home/user/openssl-x32
去
/home/user/openssl-x32
運行
./Configure mingw --cross-compile-prefix=i686-w64-mingw32 --prefix=/home/user/builds/openssl-x32-static no-shared no-async
運行
make
運行
make install
副本
libssl.a
和libcrypto.a
從/home/user/builds/openssl-x32-static/lib
主辦機(Windows 10 x64
)到文件夾E:\MyProjects\my-app\libraries\
複製
include
目錄從Ubuntu
文件夾主辦機E:\MyProjects\my-app\include
libraries
文件夾添加到鏈接器配置添加
include
文件夾編譯器配置然後,我建我的項目,得到了以下回答:
mingw32
11:58:09 **** Rebuild of configuration Debug for project app **** Info: Configuration "Debug" uses tool-chain "MinGW GCC" that is unsupported on this system, attempting to build anyway. Info: Internal Builder is used for build g++ "-IC:\MyProjects\my-app\include" -O0 -g3 -Wall -c -std=c++11 -m32 -o RsaEncryptor.o "..\RsaEncryptor.cpp" g++ "-IC:\MyProjects\my-app\include" -O0 -g3 -Wall -c -std=c++11 -m32 -o main.o "..\main.cpp" In file included from ..\main.cpp:5:0: ..\FilesFinder.h: In member function 'void FilesFinder::FindRecursively(const string&, const FilesFilter&)': ..\FilesFinder.h:90:56: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] while (destinationContainer.GetElementsCount() >= MAX_ELEMENTS_COUNT) { ^g++ "-IC:\MyProjects\my-app\include" -O0 -g3 -Wall -c -std=c++11 -m32 -o aes256.o "..\aes256.cpp" g++ "-LC:\MyProjects\my-app\libraries" -static-libgcc -static-libstdc++ -static -lpthread -m32 -o C:/MyProjects/my-app/bin/Debug/app RsaEncryptor.o aes256.o main.o -lssl -lcrypto -lgdi32 C:\MyProjects\my-app\libraries\libcrypto.a(b_addr.o):b_addr.c:(.text+0xaa): undefined reference to
[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_addr.o):b_addr.c:(.text+0xe0): undefined reference to
[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_addr.o):b_addr.c:(.text+0x242): undefined reference togai_strerrorW' C:\MyProjects\my-app\libraries\libcrypto.a(b_addr.o):b_addr.c:(.text+0x820): undefined reference to
[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_addr.o):b_addr.c:(.text+0xb5d): undefined reference to[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_addr.o):b_addr.c:(.text+0xba2): undefined reference to
gai_strerrorW' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock.o):b_sock.c:(.text+0xd7): undefined reference to[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock.o):b_sock.c:(.text+0xe8): undefined reference to
[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock.o):b_sock.c:(.text+0x2c7): undefined reference to[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock.o):b_sock.c:(.text+0x2d8): undefined reference to
[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock.o):b_sock.c:(.text+0x3b1): undefined reference to[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock.o):b_sock.c:(.text+0x40c): undefined reference to
[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock.o):b_sock.c:(.text+0x423): undefined reference to[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock.o):b_sock.c:(.text+0x43c): undefined reference to
[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock.o):b_sock.c:(.text+0x48b): undefined reference to[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock.o):b_sock.c:(.text+0x4a2): undefined reference to
[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock.o):b_sock.c:(.text+0x52c): undefined reference to[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock.o):b_sock.c:(.text+0x54d): undefined reference to
[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock.o):b_sock.c:(.text+0x563): undefined reference to[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock.o):b_sock.c:(.text+0x6b7): undefined reference to
[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock.o):b_sock.c:(.text+0x6c8): undefined reference to[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock.o):b_sock.c:(.text+0x942): undefined reference to
[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock.o):b_sock.c:(.text+0x9dc): undefined reference to[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock.o):b_sock.c:(.text+0xa15): undefined reference to
[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock.o):b_sock.c:(.text+0xa32): undefined reference to[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock.o):b_sock.c:(.text+0xaa6): undefined reference to
[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock.o):b_sock.c:(.text+0xb22): undefined reference to[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x27): undefined reference to
[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x4e): undefined reference to[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x120): undefined reference to
[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x15b): undefined reference to[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x1f5): undefined reference to
[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x206): undefined reference to[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x265): undefined reference to
[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x2c6): undefined reference to[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x377): undefined reference to
[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x38f): undefined reference to[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x4a7): undefined reference to
[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x4b4): undefined reference to[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x53a): undefined reference to
[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x55f): undefined reference to[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x5a5): undefined reference to
[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x5b6): undefined reference to[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x63a): undefined reference to
[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x64b): undefined reference to[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x6b2): undefined reference to
[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x713): undefined reference to[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x7a6): undefined reference to
[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x7e7): undefined reference to[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x84b): undefined reference to
[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x86c): undefined reference to[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(bss_sock.o):bss_sock.c:(.text+0x1b1): undefined reference to
[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(bss_sock.o):bss_sock.c:(.text+0x1d0): undefined reference to[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(bss_sock.o):bss_sock.c:(.text+0x20a): undefined reference to
[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(bss_sock.o):bss_sock.c:(.text+0x272): undefined reference to[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(bss_sock.o):bss_sock.c:(.text+0x299): undefined reference to
[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(bss_sock.o):bss_sock.c:(.text+0x2ca): undefined reference to[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(bss_sock.o):bss_sock.c:(.text+0x33d): undefined reference to
[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(bss_sock.o):bss_sock.c:(.text+0x360): undefined reference to[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(bss_sock.o):bss_sock.c:(.text+0x39a): undefined reference to
[email protected]' C:\MyProjects\my-app\libraries\libcrypto.a(bss_sock.o):bss_sock.c:(.text+0x457): undefined reference to[email protected]' c:/programs/mingw_w64_mingw32_gcc_stdthread_win32/bin/../lib/gcc/i686-w64-mingw32/4.8.1/../../../../i686-w64-mingw32/bin/ld.exe: C:\MyProjects\my-app\libraries\libcrypto.a(bss_sock.o): bad reloc address 0x24 in section
.rdata' c:/programs/mingw_w64_mingw32_gcc_stdthread_win32/bin/../lib/gcc/i686-w64-mingw32/4.8.1/../../../../i686-w64-mingw32/bin/ld.exe: final link failed: Invalid operation collect2.exe: error: ld returned 1 exit status11:58:21 Build Finished (took 11s.567ms)
我只需要將我完成的C++項目與正確編譯的(帶有標記no-async
)的OpenSSL庫鏈接起來,讓它可以在舊版本的Windows下工作。
我很樂意爲您解答此問題。
您已標記C *和* C++。他們是不同的語言。您只應標記您需要答案的語言。回答你的問題,我假設你想要C++答案,所以這次我已經爲你刪除了C標籤。 – Toby