I've compiled the OpenSSL library using Mingw32 and MSys with Strawberry Perl.
I used this forum post as a guide, even though it's quite old.
How to build OpenSSL with MinGW in Windows?
Everything went fine, I wanted to compile it as a static library and it worked, but whenever I try to compile the library with my project using g++ I get the following errors, which I have no idea what they mean.
libcrypto.a(e_capi.o):e_capi.c:(.text+0xf1): undefined reference to `_imp__CertFreeCertificateContext#4'
libcrypto.a(e_capi.o):e_capi.c:(.text+0x191): undefined reference to `_imp__CertFreeCertificateContext#4'
libcrypto.a(e_capi.o):e_capi.c:(.text+0x5ed): undefined reference to `_imp__CertGetCertificateContextProperty#16'
libcrypto.a(e_capi.o):e_capi.c:(.text+0xbd3): undefined reference to `_imp__CertGetCertificateContextProperty#16'
libcrypto.a(e_capi.o):e_capi.c:(.text+0xd40): undefined reference to `_imp__CertEnumCertificatesInStore#8'
libcrypto.a(e_capi.o):e_capi.c:(.text+0xdd9): undefined reference to `_imp__CertFindCertificateInStore#24'
libcrypto.a(e_capi.o):e_capi.c:(.text+0x3012): undefined reference to `_imp__CertOpenStore#20'
libcrypto.a(e_capi.o):e_capi.c:(.text+0x3051): undefined reference to `_imp__CertEnumCertificatesInStore#8'
libcrypto.a(e_capi.o):e_capi.c:(.text+0x316f): undefined reference to `_imp__CertDuplicateCertificateContext#4'
libcrypto.a(e_capi.o):e_capi.c:(.text+0x31f1): undefined reference to `_imp__CertCloseStore#8'
libcrypto.a(e_capi.o):e_capi.c:(.text+0x32a5): undefined reference to `_imp__CertFreeCertificateContext#4'
libcrypto.a(e_capi.o):e_capi.c:(.text+0x396c): undefined reference to `_imp__CertOpenStore#20'
libcrypto.a(e_capi.o):e_capi.c:(.text+0x39ab): undefined reference to `_imp__CertFreeCertificateContext#4'
libcrypto.a(e_capi.o):e_capi.c:(.text+0x39c3): undefined reference to `_imp__CertCloseStore#8'
libcrypto.a(e_capi.o):e_capi.c:(.text+0x3a1f): undefined reference to `_imp__CertEnumCertificatesInStore#8'
libcrypto.a(e_capi.o):e_capi.c:(.text+0x4195): undefined reference to `_imp__CertOpenStore#20'
libcrypto.a(e_capi.o):e_capi.c:(.text+0x4208): undefined reference to `_imp__CertFreeCertificateContext#4'
libcrypto.a(e_capi.o):e_capi.c:(.text+0x4221): undefined reference to `_imp__CertCloseStore#8'
libcrypto.a(e_capi.o):e_capi.c:(.text+0x4359): undefined reference to `_imp__CertFreeCertificateContext#4'
libcrypto.a(e_capi.o):e_capi.c:(.text+0x440d): undefined reference to `_imp__CertFreeCertificateContext#4'
libcrypto.a(b_addr.o):b_addr.c:(.text+0xbe): undefined reference to `_imp__getnameinfo#28'
libcrypto.a(b_addr.o):b_addr.c:(.text+0xf4): undefined reference to `_imp__ntohs#4'
libcrypto.a(b_addr.o):b_addr.c:(.text+0x29a): undefined reference to `gai_strerrorW'
libcrypto.a(b_addr.o):b_addr.c:(.text+0x7c0): undefined reference to `_imp__freeaddrinfo#4'
libcrypto.a(b_addr.o):b_addr.c:(.text+0xae8): undefined reference to `_imp__getaddrinfo#16'
libcrypto.a(b_addr.o):b_addr.c:(.text+0xbc9): undefined reference to `gai_strerrorW'
libcrypto.a(b_addr.o):b_addr.c:(.text+0xcb3): undefined reference to `_imp__getaddrinfo#16'
libcrypto.a(b_addr.o):b_addr.c:(.text+0xd91): undefined reference to `gai_strerrorW'
libcrypto.a(b_sock.o):b_sock.c:(.text+0xdf): undefined reference to `_imp__WSAStartup#8'
libcrypto.a(b_sock.o):b_sock.c:(.text+0xf0): undefined reference to `_imp__WSAGetLastError#0'
libcrypto.a(b_sock.o):b_sock.c:(.text+0x2c7): undefined reference to `_imp__WSAStartup#8'
libcrypto.a(b_sock.o):b_sock.c:(.text+0x2d8): undefined reference to `_imp__WSAGetLastError#0'
libcrypto.a(b_sock.o):b_sock.c:(.text+0x3c1): undefined reference to `_imp__ntohs#4'
libcrypto.a(b_sock.o):b_sock.c:(.text+0x41c): undefined reference to `_imp__getsockopt#20'
libcrypto.a(b_sock.o):b_sock.c:(.text+0x43a): undefined reference to `_imp__WSAGetLastError#0'
libcrypto.a(b_sock.o):b_sock.c:(.text+0x45c): undefined reference to `_imp__gethostbyname#4'
libcrypto.a(b_sock.o):b_sock.c:(.text+0x4ab): undefined reference to `_imp__WSAStartup#8'
libcrypto.a(b_sock.o):b_sock.c:(.text+0x4c2): undefined reference to `_imp__WSAGetLastError#0'
libcrypto.a(b_sock.o):b_sock.c:(.text+0x54c): undefined reference to `_imp__WSACleanup#0'
libcrypto.a(b_sock.o):b_sock.c:(.text+0x56d): undefined reference to `_imp__ioctlsocket#12'
libcrypto.a(b_sock.o):b_sock.c:(.text+0x58a): undefined reference to `_imp__WSAGetLastError#0'
libcrypto.a(b_sock.o):b_sock.c:(.text+0x757): undefined reference to `_imp__WSAStartup#8'
libcrypto.a(b_sock.o):b_sock.c:(.text+0x768): undefined reference to `_imp__WSAGetLastError#0'
libcrypto.a(b_sock.o):b_sock.c:(.text+0x962): undefined reference to `_imp__WSAGetLastError#0'
libcrypto.a(b_sock.o):b_sock.c:(.text+0x9ec): undefined reference to `_imp__setsockopt#20'
libcrypto.a(b_sock.o):b_sock.c:(.text+0xa25): undefined reference to `_imp__ioctlsocket#12'
libcrypto.a(b_sock.o):b_sock.c:(.text+0xa42): undefined reference to `_imp__WSAGetLastError#0'
libcrypto.a(b_sock.o):b_sock.c:(.text+0xab6): undefined reference to `_imp__getsockname#12'
libcrypto.a(b_sock.o):b_sock.c:(.text+0xb1a): undefined reference to `_imp__WSAGetLastError#0'
libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x27): undefined reference to `_imp__socket#12'
libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x49): undefined reference to `_imp__WSAGetLastError#0'
libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x11c): undefined reference to `_imp__setsockopt#20'
libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x157): undefined reference to `_imp__connect#12'
libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x195): undefined reference to `_imp__setsockopt#20'
libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x1a6): undefined reference to `_imp__WSAGetLastError#0'
libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x264): undefined reference to `_imp__WSAGetLastError#0'
libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x2ca): undefined reference to `_imp__WSAGetLastError#0'
libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x362): undefined reference to `_imp__bind#12'
libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x3ba): undefined reference to `_imp__WSAGetLastError#0'
libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x467): undefined reference to `_imp__getsockopt#20'
libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x47d): undefined reference to `_imp__WSAGetLastError#0'
libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x531): undefined reference to `_imp__setsockopt#20'
libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x5dd): undefined reference to `_imp__listen#8'
libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x5eb): undefined reference to `_imp__WSAGetLastError#0'
libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x675): undefined reference to `_imp__setsockopt#20'
libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x686): undefined reference to `_imp__WSAGetLastError#0'
libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x71a): undefined reference to `_imp__setsockopt#20'
libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x72b): undefined reference to `_imp__WSAGetLastError#0'
libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x792): undefined reference to `_imp__WSAGetLastError#0'
libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x826): undefined reference to `_imp__accept#12'
libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x867): undefined reference to `_imp__WSAGetLastError#0'
libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x8cb): undefined reference to `_imp__closesocket#4'
libcrypto.a(b_sock2.o):b_sock2.c:(.text+0x8ec): undefined reference to `_imp__closesocket#4'
libcrypto.a(bss_sock.o):bss_sock.c:(.text+0x1b2): undefined reference to `_imp__WSASetLastError#4'
libcrypto.a(bss_sock.o):bss_sock.c:(.text+0x1d9): undefined reference to `_imp__send#16'
libcrypto.a(bss_sock.o):bss_sock.c:(.text+0x20a): undefined reference to `_imp__WSAGetLastError#0'
libcrypto.a(bss_sock.o):bss_sock.c:(.text+0x281): undefined reference to `_imp__WSASetLastError#4'
libcrypto.a(bss_sock.o):bss_sock.c:(.text+0x2a0): undefined reference to `_imp__send#16'
libcrypto.a(bss_sock.o):bss_sock.c:(.text+0x2da): undefined reference to `_imp__WSAGetLastError#0'
libcrypto.a(bss_sock.o):bss_sock.c:(.text+0x34d): undefined reference to `_imp__WSASetLastError#4'
libcrypto.a(bss_sock.o):bss_sock.c:(.text+0x370): undefined reference to `_imp__recv#16'
libcrypto.a(bss_sock.o):bss_sock.c:(.text+0x3c2): undefined reference to `_imp__WSAGetLastError#0'
libcrypto.a(bss_sock.o):bss_sock.c:(.text+0x482): undefined reference to `_imp__WSAGetLastError#0'
collect2.exe: error: ld returned 1 exit status
I'm using VSCode as a development environment, this is the build command for the project, extracted from tasks.json:
g++.exe file1.cpp file2.cpp main.cpp -L*folder with the library* -lcrypto -o test.exe
The linker can't find several functions from Crypt32.lib and Ws2_32.lib. Link these to your exe by adding -lws2_32 -lcrypt32 to g++ command line.
#pragma comment(lib, "ws2_32.lib") is a Microsoft specific feature, g++ does not support this, thus you were not able to link libraries with this pragma. See also this post - #pragma comment(lib, "xxx.lib") equivalent under Linux?.
This question already has answers here:
What is an undefined reference/unresolved external symbol error and how do I fix it?
(39 answers)
Linux c++ error: undefined reference to 'dlopen'
(12 answers)
Closed 4 years ago.
I need some basic understanding,
I have 4 files in this folder
Makefile , libfoo_8_3.so , libfoo_9_3.so , test.c
I compile test.c to make object file test.o and .d file. This Compiles fine
Those two dynamic libraries (libfoo_8_3.so libfoo_9_3.so)are used by my c program
I wanted to make executable.
I am using Makefile, because I needed headers and structures from c files present in the different folder.
I want to make an executable binary,
when I do something like
gcc -fno-builtin-log -fno-omit-frame-pointer -msse2 -DMEMS_DEBUG -DMEMS_DISABLED -D__HMAP_64BIT_COMPLIANT_ID_LENGTH__ -DNETOID_LINUX -D_REENTRANT -DXML_BYTE_ORDER=12 -DNX_BYTE_ORDER=12 -DTHIRTY_TWO_BIT -DALLOW_ISERVER_H323 -D_POSIX_PTHREAD_SEMANTICS -DMEMS_DEBUG -ggdb -L/usr/local/lib -L/usr/lib64 -L/SBC/lib/x86_64 -L/SBC/pkgs_x86_64/def/lib -L/SBC/bin/x86_64 -I(Include many folders)
-o test test.o
This gives me following error ->
est.o: In function `main':
/SBC/ser/test.c:33: undefined reference to `dlopen'
/SBC/ser/test.c:35: undefined reference to `dlopen'
/SBC/ser/test.c:50: undefined reference to `dlsym'
/SBC/ser/test.c:52: undefined reference to `dlsym'
/SBC/ser/test.c:68: undefined reference to `tracer_tag_key'
/SBC/ser/test.c:68: undefined reference to `pthread_getspecific'
/SBC/ser/test.c:68: undefined reference to `netLogStruct'
/SBC/ser/test.c:68: undefined reference to `NetLogModuleFacilities'
/SBC/ser/test.c:68: undefined reference to `NetLogModuleNames'
/SBC/ser/test.c:68: undefined reference to `NetSyslogSprintf'
/SBC/ser/test.c:68: undefined reference to `netLogStruct'
/SBC/ser/test.c:68: undefined reference to `NetLogModuleNames'
/SBC/ser/test.c:74: undefined reference to `tracer_tag_key'
/SBC/ser/test.c:74: undefined reference to `pthread_getspecific'
/SBC/ser/test.c:74: undefined reference to `netLogStruct'
/SBC/ser/test.c:74: undefined reference to `NetLogModuleFacilities'
/SBC/ser/test.c:74: undefined reference to `NetLogModuleNames'
/SBC/ser/test.c:74: undefined reference to `NetSyslogSprintf'
/SBC/ser/test.c:74: undefined reference to `netLogStruct'
/SBC/ser/test.c:74: undefined reference to `NetLogModuleNames'
/SBC/ser/test.c:82: undefined reference to `tracer_tag_key'
/SBC/ser/test.c:82: undefined reference to `pthread_getspecific'
/SBC/ser/test.c:82: undefined reference to `netLogStruct'
/SBC/ser/test.c:82: undefined reference to `NetLogModuleFacilities'
/SBC/ser/test.c:82: undefined reference to `NetLogModuleNames'
/SBC/ser/test.c:82: undefined reference to `NetSyslogSprintf'
/SBC/ser/test.c:82: undefined reference to `netLogStruct'
/SBC/ser/test.c:82: undefined reference to `NetLogModuleNames'
I need a proper understanding of this , or how can I resolve this ?
I just installed GLFW3 on Ubuntu and I'm testing the example code from the documentation (http://www.glfw.org/documentation.html) and I got those errors.
I tried multiples thing like adding -ldl, but nothing seems to work.
Here is the error log (GCC):
g++ -o bin/Debug/Game obj/Debug/main.o -ldl -lglfw3 -lm -lGL -lGLU
//usr/local/lib/libglfw3.a(vulkan.c.o): In function `_glfwInitVulkan':
vulkan.c:(.text+0x42): undefined reference to `dlopen'
vulkan.c:(.text+0xa9): undefined reference to `dlsym'
//usr/local/lib/libglfw3.a(vulkan.c.o): In function `_glfwTerminateVulkan':
vulkan.c:(.text+0x382): undefined reference to `dlclose'
//usr/local/lib/libglfw3.a(vulkan.c.o): In function `glfwGetInstanceProcAddress':
vulkan.c:(.text+0x72f): undefined reference to `dlsym'
//usr/local/lib/libglfw3.a(x11_init.c.o): In function `translateKeyCode':
x11_init.c:(.text+0x6a): undefined reference to `XkbKeycodeToKeysym'
x11_init.c:(.text+0x14a): undefined reference to `XkbKeycodeToKeysym'
x11_init.c:(.text+0x177): undefined reference to `XGetKeyboardMapping'
x11_init.c:(.text+0x191): undefined reference to `XFree'
//usr/local/lib/libglfw3.a(x11_init.c.o): In function `createKeyTables':
x11_init.c:(.text+0xc3e): undefined reference to `XkbGetMap'
x11_init.c:(.text+0xc61): undefined reference to `XkbGetNames'
x11_init.c:(.text+0x137f): undefined reference to `XkbFreeNames'
x11_init.c:(.text+0x1395): undefined reference to `XkbFreeKeyboard'
//usr/local/lib/libglfw3.a(x11_init.c.o): In function `hasUsableInputMethodStyle':
x11_init.c:(.text+0x14b2): undefined reference to `XGetIMValues'
x11_init.c:(.text+0x150c): undefined reference to `XFree'
//usr/local/lib/libglfw3.a(x11_init.c.o): In function `getSupportedAtom':
x11_init.c:(.text+0x155b): undefined reference to `XInternAtom'
//usr/local/lib/libglfw3.a(x11_init.c.o): In function `detectEWMH':
x11_init.c:(.text+0x15ea): undefined reference to `XInternAtom'
x11_init.c:(.text+0x1610): undefined reference to `XInternAtom'
x11_init.c:(.text+0x1678): undefined reference to `XFree'
x11_init.c:(.text+0x16a1): undefined reference to `XFree'
x11_init.c:(.text+0x16ad): undefined reference to `XFree'
x11_init.c:(.text+0x16be): undefined reference to `XFree'
x11_init.c:(.text+0x16ca): undefined reference to `XFree'
//usr/local/lib/libglfw3.a(x11_init.c.o):x11_init.c:(.text+0x190d): more undefined references to `XFree' follow
//usr/local/lib/libglfw3.a(x11_init.c.o): In function `initExtensions':
x11_init.c:(.text+0x194e): undefined reference to `dlopen'
x11_init.c:(.text+0x1993): undefined reference to `dlsym'
x11_init.c:(.text+0x19c1): undefined reference to `dlsym'
x11_init.c:(.text+0x19ef): undefined reference to `dlsym'
x11_init.c:(.text+0x1a1d): undefined reference to `dlsym'
x11_init.c:(.text+0x1a8b): undefined reference to `dlopen'
x11_init.c:(.text+0x1ad0): undefined reference to `dlsym'
x11_init.c:(.text+0x1afe): undefined reference to `dlsym'
x11_init.c:(.text+0x1b56): undefined reference to `XQueryExtension'
x11_init.c:(.text+0x1bdf): undefined reference to `dlopen'
x11_init.c:(.text+0x1c24): undefined reference to `dlsym'
x11_init.c:(.text+0x1c52): undefined reference to `dlsym'
x11_init.c:(.text+0x1c80): undefined reference to `dlsym'
x11_init.c:(.text+0x1cae): undefined reference to `dlsym'
x11_init.c:(.text+0x1cdc): undefined reference to `dlsym'
//usr/local/lib/libglfw3.a(x11_init.c.o):x11_init.c:(.text+0x1d0a): more undefined references to `dlsym' follow
//usr/local/lib/libglfw3.a(x11_init.c.o): In function `initExtensions':
x11_init.c:(.text+0x214a): undefined reference to `dlopen'
x11_init.c:(.text+0x218f): undefined reference to `dlsym'
x11_init.c:(.text+0x21bd): undefined reference to `dlsym'
x11_init.c:(.text+0x21eb): undefined reference to `dlsym'
x11_init.c:(.text+0x220d): undefined reference to `dlopen'
x11_init.c:(.text+0x2252): undefined reference to `dlsym'
x11_init.c:(.text+0x2280): undefined reference to `dlsym'
x11_init.c:(.text+0x22ae): undefined reference to `dlsym'
x11_init.c:(.text+0x23b4): undefined reference to `XkbQueryExtension'
x11_init.c:(.text+0x23f3): undefined reference to `XkbSetDetectableAutoRepeat'
x11_init.c:(.text+0x2420): undefined reference to `dlopen'
Order of libraries matter. If library A depends on library B, then A must come before B on the command line.
In your case, since the glfw3 library depends on the dl library, you must switch order so that glfw3 comes before dl on the command line.
You also must link with the X11 library.
So the full command line should look something like
g++ -o bin/Debug/Game obj/Debug/main.o -lglfw3 -ldl -lm -lGL -lGLU -lX11
I am trying to compile a very simple OpenGL program that uses GLFW3. Despite linking everything I deem necessary, I'm getting a plethora of undefined references.
/usr/local/lib/libglfw3.a(x11_gamma.c.o): In function `_glfwInitGammaRamp':
x11_gamma.c:(.text+0x49): undefined reference to `XRRGetScreenResources'
x11_gamma.c:(.text+0x6a): undefined reference to `XRRGetCrtcGammaSize'
x11_gamma.c:(.text+0x81): undefined reference to `XRRFreeScreenResources'
/usr/local/lib/libglfw3.a(x11_gamma.c.o): In function `_glfwPlatformGetGammaRamp':
x11_gamma.c:(.text+0xce): undefined reference to `XRRGetCrtcGammaSize'
x11_gamma.c:(.text+0xf1): undefined reference to `XRRGetCrtcGamma'
x11_gamma.c:(.text+0x198): undefined reference to `XRRFreeGamma'
/usr/local/lib/libglfw3.a(x11_gamma.c.o): In function `_glfwPlatformSetGammaRamp':
x11_gamma.c:(.text+0x24c): undefined reference to `XRRAllocGamma'
x11_gamma.c:(.text+0x303): undefined reference to `XRRSetCrtcGamma'
x11_gamma.c:(.text+0x30f): undefined reference to `XRRFreeGamma'
/usr/local/lib/libglfw3.a(x11_init.c.o): In function `initExtensions':
x11_init.c:(.text+0x1a67): undefined reference to `XRRQueryExtension'
x11_init.c:(.text+0x1a91): undefined reference to `XRRQueryVersion'
x11_init.c:(.text+0x1b25): undefined reference to `XIQueryVersion'
/usr/local/lib/libglfw3.a(x11_monitor.c.o): In function `_glfwSetVideoMode':
x11_monitor.c:(.text+0x177): undefined reference to `XRRGetScreenResources'
x11_monitor.c:(.text+0x19c): undefined reference to `XRRGetCrtcInfo'
x11_monitor.c:(.text+0x1be): undefined reference to `XRRGetOutputInfo'
x11_monitor.c:(.text+0x3d0): undefined reference to `XRRSetCrtcConfig'
x11_monitor.c:(.text+0x3dc): undefined reference to `XRRFreeOutputInfo'
x11_monitor.c:(.text+0x3e8): undefined reference to `XRRFreeCrtcInfo'
x11_monitor.c:(.text+0x3f4): undefined reference to `XRRFreeScreenResources'
/usr/local/lib/libglfw3.a(x11_monitor.c.o): In function `_glfwRestoreVideoMode':
x11_monitor.c:(.text+0x446): undefined reference to `XRRGetScreenResources'
x11_monitor.c:(.text+0x46b): undefined reference to `XRRGetCrtcInfo'
x11_monitor.c:(.text+0x4e0): undefined reference to `XRRSetCrtcConfig'
x11_monitor.c:(.text+0x4ec): undefined reference to `XRRFreeCrtcInfo'
x11_monitor.c:(.text+0x4f8): undefined reference to `XRRFreeScreenResources'
/usr/local/lib/libglfw3.a(x11_monitor.c.o): In function `_glfwPlatformGetMonitors':
x11_monitor.c:(.text+0x55a): undefined reference to `XRRGetScreenResources'
x11_monitor.c:(.text+0x577): undefined reference to `XRRGetOutputPrimary'
x11_monitor.c:(.text+0x5cf): undefined reference to `XRRGetCrtcInfo'
x11_monitor.c:(.text+0x5ea): undefined reference to `XRRFreeCrtcInfo'
x11_monitor.c:(.text+0x659): undefined reference to `XRRGetOutputInfo'
x11_monitor.c:(.text+0x676): undefined reference to `XRRFreeOutputInfo'
x11_monitor.c:(.text+0x682): undefined reference to `XRRFreeCrtcInfo'
x11_monitor.c:(.text+0x703): undefined reference to `XRRFreeOutputInfo'
x11_monitor.c:(.text+0x70f): undefined reference to `XRRFreeCrtcInfo'
x11_monitor.c:(.text+0x733): undefined reference to `XRRFreeScreenResources'
/usr/local/lib/libglfw3.a(x11_monitor.c.o): In function `_glfwPlatformGetMonitorPos':
x11_monitor.c:(.text+0x8a2): undefined reference to `XRRGetScreenResources'
x11_monitor.c:(.text+0x8c7): undefined reference to `XRRGetCrtcInfo'
x11_monitor.c:(.text+0x8ff): undefined reference to `XRRFreeCrtcInfo'
x11_monitor.c:(.text+0x90b): undefined reference to `XRRFreeScreenResources'
/usr/local/lib/libglfw3.a(x11_monitor.c.o): In function `_glfwPlatformGetVideoModes':
x11_monitor.c:(.text+0x9ad): undefined reference to `XRRGetScreenResources'
x11_monitor.c:(.text+0x9cf): undefined reference to `XRRGetOutputInfo'
x11_monitor.c:(.text+0xb44): undefined reference to `XRRFreeOutputInfo'
x11_monitor.c:(.text+0xb50): undefined reference to `XRRFreeScreenResources'
/usr/local/lib/libglfw3.a(x11_monitor.c.o): In function `_glfwPlatformGetVideoMode':
x11_monitor.c:(.text+0xc28): undefined reference to `XRRGetScreenResources'
x11_monitor.c:(.text+0xc4d): undefined reference to `XRRGetCrtcInfo'
x11_monitor.c:(.text+0xca2): undefined reference to `XRRFreeCrtcInfo'
x11_monitor.c:(.text+0xcae): undefined reference to `XRRFreeScreenResources'
/usr/local/lib/libglfw3.a(x11_window.c.o): In function `createWindow':
x11_window.c:(.text+0x666): undefined reference to `XISelectEvents'
x11_window.c:(.text+0x6a8): undefined reference to `XRRSelectInput'
/usr/local/lib/libglfw3.a(x11_window.c.o): In function `processEvent':
x11_window.c:(.text+0x1711): undefined reference to `XRRUpdateConfiguration'
My linked CMake flags:
-I/usr/local/include -L/usr/local/lib -lglfw3 -lGLU -lGL -lGLEW
Should I be linking anything else?
I figured out the answer myself while writing the question.
I was misled into believing that I was linking everything necessary because of the output of
pkg-config --libs --cflags --print-requires glfw3
which was
-I/usr/local/include -L/usr/local/lib -lglfw3
The --print-requires flag was having no impact at all on the output, which seemed odd. I searched and printed the corresponding .pc file.
sudo find / | grep "glfw3\.pc"
cat /usr/local/lib/pkgconfig/glfw3.pc
There I found this.
Requires.private: x11 xrandr xi xxf86vm gl
Which indicates which libraries are required for static linking. I added their correponding flags to CMake and it worked. My mistake was that I missed the --print-requires-private flag when executing pkg-config.
I hope this helps someone save some time.
I'm writing a Qt application that uses Botan. For the Windows version I decided to use the precompiled DLL, so I downloaded the installer, installed Botan in C:\botan and added:
win32:INCLUDEPATH += C:/botan/include
win32:LIBS += -L"C:\botan" -lbotan
to my .pro file. However I'm getting linker errors (undefined reference to...) during the build process, and I can't see why - the correct .lib is specified in LIBS, the include path is fine.
I'm using MinGW.
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:52: undefined reference to `_imp___ZN5Botan17have_block_cipherERKSs'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:58: undefined reference to `_imp___ZN5Botan16max_keylength_ofERKSs'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:59: undefined reference to `_imp___ZN5Botan13block_size_ofERKSs'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:61: undefined reference to `_imp___ZN5Botan14AutoSeeded_RNGC1Ej'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:63: undefined reference to `_imp___ZN5Botan7get_s2kERKSs'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:64: undefined reference to `_imp___ZN5Botan3S2K14set_iterationsEj'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:65: undefined reference to `_imp___ZN5Botan3S2K15new_random_saltERNS_21RandomNumberGeneratorEj'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:67: undefined reference to `_imp___ZNK5Botan3S2K10derive_keyEjRKSs'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:68: undefined reference to `_imp___ZNK5Botan3S2K10derive_keyEjRKSs'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:69: undefined reference to `_imp___ZNK5Botan3S2K10derive_keyEjRKSs'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:83: undefined reference to `_imp___ZN5Botan10MAC_FilterC1ERKSsRKNS_11OctetStringEj'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:83: undefined reference to `_imp___ZN5Botan14Base64_EncoderC1Ebjb'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:83: undefined reference to `_imp___ZN5Botan5ChainC1EPNS_6FilterES2_S2_S2_'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:83: undefined reference to `_imp___ZN5Botan10get_cipherERKSsRKNS_11OctetStringES4_NS_10Cipher_DirE'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:83: undefined reference to `_imp___ZN5Botan14Base64_EncoderC1Ebjb'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:83: undefined reference to `_imp___ZN5Botan5ChainC1EPNS_6FilterES2_S2_S2_'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:83: undefined reference to `_imp___ZN5Botan4ForkC1EPNS_6FilterES2_S2_S2_'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:83: undefined reference to `_imp___ZN5Botan4PipeC1EPNS_6FilterES2_S2_S2_'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:83: undefined reference to `_imp___ZN5Botan4PipeD1Ev'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:85: undefined reference to `_imp___ZN5Botan4Pipe9start_msgEv'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:83: undefined reference to `_imp___ZN5Botan4PipeD1Ev'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:86: undefined reference to `_imp___ZN5BotanrsERSiRNS_4PipeE'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:87: undefined reference to `_imp___ZN5Botan4Pipe7end_msgEv'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:89: undefined reference to `_imp___ZN5Botan4Pipe18read_all_as_stringEj'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:90: undefined reference to `_imp___ZN5Botan4Pipe18read_all_as_stringEj'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:90: undefined reference to `_imp___ZN5Botan4PipeD1Ev'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:90: undefined reference to `_imp___ZN5Botan4PipeD1Ev'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:142: undefined reference to `_imp___ZN5Botan17have_block_cipherERKSs'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:148: undefined reference to `_imp___ZN5Botan16max_keylength_ofERKSs'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:149: undefined reference to `_imp___ZN5Botan13block_size_ofERKSs'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:151: undefined reference to `_imp___ZN5Botan7get_s2kERKSs'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:152: undefined reference to `_imp___ZN5Botan3S2K14set_iterationsEj'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:153: undefined reference to `_imp___ZN5Botan3S2K11change_saltERKNS_12MemoryRegionIhEE'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:155: undefined reference to `_imp___ZNK5Botan3S2K10derive_keyEjRKSs'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:156: undefined reference to `_imp___ZNK5Botan3S2K10derive_keyEjRKSs'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:157: undefined reference to `_imp___ZNK5Botan3S2K10derive_keyEjRKSs'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:164: undefined reference to `_imp___ZN5Botan10MAC_FilterC1ERKSsRKNS_11OctetStringEj'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:164: undefined reference to `_imp___ZN5Botan14Base64_EncoderC1Ebjb'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:164: undefined reference to `_imp___ZN5Botan5ChainC1EPNS_6FilterES2_S2_S2_'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:164: undefined reference to `_imp___ZN5Botan4ForkC1EPNS_6FilterES2_S2_S2_'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:164: undefined reference to `_imp___ZN5Botan10get_cipherERKSsRKNS_11OctetStringES4_NS_10Cipher_DirE'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:164: undefined reference to `_imp___ZN5Botan14Base64_DecoderC1ENS_16Decoder_CheckingE'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:164: undefined reference to `_imp___ZN5Botan4PipeC1EPNS_6FilterES2_S2_S2_'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:164: undefined reference to `_imp___ZN5Botan4PipeD1Ev'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:166: undefined reference to `_imp___ZN5Botan4Pipe9start_msgEv'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:164: undefined reference to `_imp___ZN5Botan4PipeD1Ev'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:167: undefined reference to `_imp___ZN5BotanrsERSiRNS_4PipeE'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:168: undefined reference to `_imp___ZN5Botan4Pipe7end_msgEv'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:170: undefined reference to `_imp___ZN5Botan4Pipe18read_all_as_stringEj'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:174: undefined reference to `_imp___ZN5Botan4Pipe18read_all_as_stringEj'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:174: undefined reference to `_imp___ZN5Botan4PipeD1Ev'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:174: undefined reference to `_imp___ZN5Botan4PipeD1Ev'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:195: undefined reference to `_imp___ZN5Botan14Base64_EncoderC1Ebjb'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:195: undefined reference to `_imp___ZN5Botan4PipeC1EPNS_6FilterES2_S2_S2_'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:196: undefined reference to `_imp___ZN5Botan4Pipe11process_msgERKNS_12MemoryRegionIhEE'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:197: undefined reference to `_imp___ZN5Botan4Pipe15DEFAULT_MESSAGEE'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:197: undefined reference to `_imp___ZN5Botan4Pipe18read_all_as_stringEj'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:197: undefined reference to `_imp___ZN5Botan4PipeD1Ev'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:197: undefined reference to `_imp___ZN5Botan4PipeD1Ev'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:202: undefined reference to `_imp___ZN5Botan14Base64_DecoderC1ENS_16Decoder_CheckingE'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:202: undefined reference to `_imp___ZN5Botan4PipeC1EPNS_6FilterES2_S2_S2_'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:203: undefined reference to `_imp___ZN5Botan4Pipe11process_msgERKSs'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:204: undefined reference to `_imp___ZN5Botan4Pipe15DEFAULT_MESSAGEE'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:204: undefined reference to `_imp___ZN5Botan4Pipe8read_allEj'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:204: undefined reference to `_imp___ZN5Botan4PipeD1Ev'
./debug\databasecrypto.o:D:\Development\Qt\silverlock-build-desktop\silverlocklib/../../Silverlock/silverlocklib/databasecrypto.cpp:204: undefined reference to `_imp___ZN5Botan4PipeD1Ev'
./debug\databasecrypto.o: In function `LibraryInitializer':
c:/botan/include/botan/init.h:34: undefined reference to `_imp___ZN5Botan18LibraryInitializer10initializeERKSs'
./debug\databasecrypto.o: In function `~LibraryInitializer':
c:/botan/include/botan/init.h:36: undefined reference to `_imp___ZN5Botan18LibraryInitializer12deinitializeEv'
./debug\databasecrypto.o: In function `~Exception':
c:/botan/include/botan/exceptn.h:25: undefined reference to `_imp___ZTVN5Botan9ExceptionE'
c:/botan/include/botan/exceptn.h:25: undefined reference to `_imp___ZTVN5Botan9ExceptionE'
c:/botan/include/botan/exceptn.h:25: undefined reference to `_imp___ZTVN5Botan9ExceptionE'
./debug\databasecrypto.o: In function `~Format_Error':
c:/botan/include/botan/exceptn.h:110: undefined reference to `_imp___ZTVN5Botan12Format_ErrorE'
c:/botan/include/botan/exceptn.h:110: undefined reference to `_imp___ZTVN5Botan12Format_ErrorE'
c:/botan/include/botan/exceptn.h:110: undefined reference to `_imp___ZTVN5Botan12Format_ErrorE'
./debug\databasecrypto.o: In function `~Decoding_Error':
c:/botan/include/botan/exceptn.h:135: undefined reference to `_imp___ZTVN5Botan14Decoding_ErrorE'
c:/botan/include/botan/exceptn.h:135: undefined reference to `_imp___ZTVN5Botan14Decoding_ErrorE'
./debug\databasecrypto.o: In function `Exception':
c:/botan/include/botan/exceptn.h:21: undefined reference to `_imp___ZTVN5Botan9ExceptionE'
./debug\databasecrypto.o: In function `~RandomNumberGenerator':
c:/botan/include/botan/rng.h:78: undefined reference to `_imp___ZTVN5Botan21RandomNumberGeneratorE'
c:/botan/include/botan/rng.h:78: undefined reference to `_imp___ZTVN5Botan21RandomNumberGeneratorE'
c:/botan/include/botan/rng.h:78: undefined reference to `_imp___ZTVN5Botan21RandomNumberGeneratorE'
./debug\databasecrypto.o: In function `~AutoSeeded_RNG':
c:/botan/include/botan/auto_rng.h:37: undefined reference to `_imp___ZTVN5Botan14AutoSeeded_RNGE'
c:/botan/include/botan/auto_rng.h:37: undefined reference to `_imp___ZTVN5Botan14AutoSeeded_RNGE'
./debug\databasecrypto.o: In function `Algorithm_Not_Found':
c:/botan/include/botan/exceptn.h:102: undefined reference to `_imp___ZTVN5Botan19Algorithm_Not_FoundE'
./debug\databasecrypto.o: In function `~Algorithm_Not_Found':
c:/botan/include/botan/exceptn.h:102: undefined reference to `_imp___ZTVN5Botan19Algorithm_Not_FoundE'
c:/botan/include/botan/exceptn.h:102: undefined reference to `_imp___ZTVN5Botan19Algorithm_Not_FoundE'
./debug\databasecrypto.o: In function `Format_Error':
c:/botan/include/botan/exceptn.h:110: undefined reference to `_imp___ZTVN5Botan12Format_ErrorE'
./debug\databasecrypto.o: In function `Decoding_Error':
c:/botan/include/botan/exceptn.h:135: undefined reference to `_imp___ZTVN5Botan14Decoding_ErrorE'
collect2: ld returned 1 exit status
Since Botan is included in QtCreator (2.x branches), you could just recompile QtCreator (or take the relevant parts), and use that. No messing with any makefiles (mingw works out of the box), and since you mention Qt, this will probably work very well.
As far as I know, official binaries are compatible with MSVC only. I guess you should build Botan from source to use it with MinGW. According to docs it's relatively easy to do:
$ python configure.py
$ make
$ make check
$ make install
But for me compiler autodetection didn't work as expected, so I had to do few additional steps:
Autoconfiguration:
$ python configure.py --cc=gcc
Edit generated Makefile. Replace line
LINK_TO = -ladvapi32.lib -luser32.lib
with
LINK_TO = -ladvapi32 -luser32
Build
$ make
$ make check
$ make install
I've used this command to build botan using mingw32-make.exe, i've ran it in a console window with Qt support.
python configure.py --cc=gcc --cpu=x86 --os=mingw --without-stack-protector --amalgamation --minimized-build --disable-shared --enable-modules=aes,aes_ssse3,auto_rng,bigint,block,cbc,ctr,des,dh,dsa,ec_group,ecdh,ecdsa,entropy,filters,hmac,mode_pad,pubkey,rsa,sha1,sha1_sse2,sha1_x86,sha2_32,sha2_32_x86,sha2_64,simd,system_rng,emsa_pkcs1,pbes2,pbkdf2 --without-documentation
mingw32-make.exe
mingw32-make.exe install