2016-09-02 21 views
0

Postgres 9.5.4 for OpenSSL 1.1.0を設定しようとしています。設定はOpenSSL 1.1.0でSSL_library_initが見つからないために死ぬでしょう。 OpenSSL 1.1.0はSSL_library_initの代わりにOPENSSL_init_sslを提供します。したがって、AutoconfはSSL_library_initまたはOPENSSL_init_sslのいずれかをチェックする必要があります。AutoconfにLIBの "シンボルAまたはBが必要です"と伝えるには?

AC_CHECK_LIB(ssl, SSL_library_init, [], [AC_MSG_ERROR([library 'ssl' is required for OpenSSL])]) 

どのように私は[ルールを?]修正するかSSL_library_initまたはOPENSSL_init_sslのいずれかを探すために:

Postgresは次のテストを使用していますか?


ネイティブに、私はconfigure.inを次のように変更しましたが、これは動作しませんでした。私が言うことができる最高のは、私の変更が(でもautoreconfを実行した後に)無視された:ここでは

AC_CHECK_LIB(ssl, SSL_library_init|OPENSSL_init_ssl, [], [AC_MSG_ERROR([library 'ssl' is required for OpenSSL])]) 

はPostgrsコマンドを設定している:

:ここ

$ ./configure --with-openssl --with-includes=/usr/local/ssl/include --with-libraries=/usr/local/ssl/lib 

config.logから関連エントリです

configure:8732: gcc -o conftest -Wall -Wmissing-prototypes -Wpointer-arith 
-Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute 
-Wformat-security -fno-strict-aliasing -fwrapv 
-Wno-unused-command-line-argument -I/usr/local/ssl/include 
-L/usr/local/ssl/lib -I/usr/local/ssl/include -L/usr/local/ssl/lib 
conftest.c -lssl -lcrypto -lz -lreadline -lm >&5 
Undefined symbols for architecture x86_64: 
    "_SSL_library_init", referenced from: 
     _main in conftest-c0c2a1.o 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see 
invocation) 
configure:8732: $? = 1 
configure: failed program was: 
| /* confdefs.h */ 
| #define PACKAGE_NAME "PostgreSQL" 
| #define PACKAGE_TARNAME "postgresql" 
| #define PACKAGE_VERSION "9.5.4" 
| #define PACKAGE_STRING "PostgreSQL 9.5.4" 
| #define PACKAGE_BUGREPORT "pgsql-bugs(at)postgresql(dot)org" 
| #define PACKAGE_URL "" 
| #define PG_MAJORVERSION "9.5" 
| #define PG_VERSION "9.5.4" 
| #define USE_INTEGER_DATETIMES 1 
| #define DEF_PGPORT 5432 
| #define DEF_PGPORT_STR "5432" 
| #define BLCKSZ 8192 
| #define RELSEG_SIZE 131072 
| #define XLOG_BLCKSZ 8192 
| #define XLOG_SEG_SIZE (16 * 1024 * 1024) 
| #define ENABLE_THREAD_SAFETY 1 
| #define PG_KRB_SRVNAM "postgres" 
| #define USE_OPENSSL 1 
| #define HAVE_LIBM 1 
| #define HAVE_LIBREADLINE 1 
| #define HAVE_LIBZ 1 
| #define HAVE_SPINLOCKS 1 
| #define HAVE_ATOMICS 1 
| #define HAVE_LIBCRYPTO 1 
| /* end confdefs.h. */ 
| 
| /* Override any GCC internal prototype to avoid an error. 
| Use char because int might match the return type of a GCC 
| builtin and then its argument prototype would still apply. */ 
| #ifdef __cplusplus 
| extern "C" 
| #endif 
| char SSL_library_init(); 
| int 
| main() 
| { 
| return SSL_library_init(); 
| ; 
| return 0; 
| } 
configure:8741: result: no 
configure:8751: error: library 'ssl' is required for OpenSSL 

答えて

1

これはあなたにとってうまくいくはずです:

ACCEPT_SSL_LIB="no" 
AC_CHECK_LIB(ssl, OPENSSL_init_ssl, [ACCEPT_SSL_LIB="yes"]) 
AC_CHECK_LIB(ssl, SSL_library_init, [ACCEPT_SSL_LIB="yes"]) 
AS_IF([test "x$ACCEPT_SSL_LIB" = xno], [AC_MSG_ERROR([library 'ssl' is required for OpenSSL])]) 

あなたが実際に正しい値にそれを修正するヘッダ・ファイル内のいくつかのマクロの魔法がありますしない限り、何のinit関数は、SSLを設定するには、呼び出すためにあなたを伝えるために別の変数が必要な場合があります。

+0

ありがとうございました。はい、ソースコードにはOpenSSL固有のマクロマジックがあります。 (私にとっては)固着点が設定上の問題を克服しています。 – jww

0

@ ldav1sの回答に基づいて、過去の設定を取得するにはconfigure.inの変更が必要です。 configure.inが変更されたら、autoreconfを実行する必要があります。

$ git diff configure.in > configure.in.diff 

$ cat configure.in.diff 
diff --git a/configure.in b/configure.in 
index c878b4e..7ba7538 100644 
--- a/configure.in 
+++ b/configure.in 
@@ -1112,10 +1112,16 @@ if test "$with_openssl" = yes ; then 
    dnl Order matters! 
    if test "$PORTNAME" != "win32"; then 
     AC_CHECK_LIB(crypto, CRYPTO_new_ex_data, [], [AC_MSG_ERROR([library 'crypto' is required for OpenSSL])]) 
-  AC_CHECK_LIB(ssl, SSL_library_init, [], [AC_MSG_ERROR([library 'ssl' is required for OpenSSL])]) 
+  FOUND_SSL_LIB="no" 
+  AC_CHECK_LIB(ssl, OPENSSL_init_ssl, [FOUND_SSL_LIB="yes"]) 
+  AC_CHECK_LIB(ssl, SSL_library_init, [FOUND_SSL_LIB="yes"]) 
+  AS_IF([test "x$FOUND_SSL_LIB" = xno], [AC_MSG_ERROR([library 'ssl' is required for OpenSSL])]) 
    else 
     AC_SEARCH_LIBS(CRYPTO_new_ex_data, eay32 crypto, [], [AC_MSG_ERROR([library 'eay32' or 'crypto' is required for OpenSSL])]) 
-  AC_SEARCH_LIBS(SSL_library_init, ssleay32 ssl, [], [AC_MSG_ERROR([library 'ssleay32' or 'ssl' is required for OpenSSL])]) 
+  FOUND_SSL_LIB="no" 
+  AC_SEARCH_LIBS(OPENSSL_init_ssl, ssleay32 ssl, [FOUND_SSL_LIB="yes"]) 
+  AC_SEARCH_LIBS(SSL_library_init, ssleay32 ssl, [FOUND_SSL_LIB="yes"]) 
+  AS_IF([test "x$FOUND_SSL_LIB" = xno], [AC_MSG_ERROR([library 'ssleay32' or 'ssl' is required for OpenSSL])]) 
    fi 
    AC_CHECK_FUNCS([SSL_get_current_compression]) 
fi 
関連する問題