[openssl-users] Problem in installing gem puma

Michael Wojcik Michael.Wojcik at microfocus.com
Wed Aug 19 13:55:39 UTC 2015


This is not an OpenSSL issue; it's an autoconf one.

From your installation log:

-----
"gcc -o conftest.exe -IC:/Ruby21/include/ruby-2.1.0/i386-mingw32 -IC:/Ruby21/include/ruby-2.1.0/ruby/backward -IC:/Ruby21/include/ruby-2.1.0 -I. -DFD_SETSIZE=2048 -D_WIN32_WINNT=0x0501 -D__MINGW_USE_VC2005_COMPAT -D_FILE_OFFSET_BITS=64   -O3 -fno-omit-frame-pointer -fno-fast-math -g -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wimplicit-function-declaration conftest.c  -L. -LC:/Ruby21/lib -L.      -lmsvcrt-ruby210 -lcrypto  -lshell32 -lws2_32 -liphlpapi -limagehlp -lshlwapi  "
conftest.c: In function 't':
conftest.c:16:57: error: 'BIO_read' undeclared (first use in this function)
conftest.c:16:57: note: each undeclared identifier is reported only once for each function it appears in
conftest.c:16:32: warning: variable 'p' set but not used [-Wunused-but-set-variable]
checked program was:
/* begin */
 1: #include "ruby.h"
 2: 
 3: #include <winsock2.h>
 4: #include <windows.h>
 5: 
 6: /*top*/
 7: extern int t(void);
 8: int main(int argc, char **argv)
 9: {
10:   if (argc > 1000000) {
11:     printf("%p", &t);
12:   }
13: 
14:   return 0;
15: }
16: int t(void) { void ((*volatile p)()); p = (void ((*)()))BIO_read; return 0; }
/* end */
-----

Note:
- The conftest.c generated by autoconf does not include any OpenSSL headers
- gcc correctly complains that BIO_read has not been declared

It's not a linker failure - it's a compiler diagnostic. autoconf isn't successfully checking whether the symbol can be resolved by the library because the test program it's generating is rubbish.

Autoconf should be generating an extern declaration for BIO_read in conftest.c; apparently whoever wrote that bit of autoconf doesn't know C. (No surprise there.) I suspect it normally works because gcc is configured with different default settings and treats the lack of a declaration as non-fatal. I don't know why it's different in your case, and I have no idea how to fix it, as I've never had to poke into the implementation of autoconf and don't know what's making your gcc behave differently.

-- 
Michael Wojcik
Technology Specialist, Micro Focus



More information about the openssl-users mailing list