質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.53%

  • C

    3657questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

  • OpenSSL

    107questions

    OpenSSLはSSL/TLSのプロトコルと一般的な暗号のライブラリを導入するオープンソースのソフトウェアのツールキットです。

undefined reference to `SSL_library_init' in msys2

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 300

yumetodo

score 2244

msys2($MSYSTEM=MSYS)にて、wget 1.19.5のビルドをしようとして失敗しています。

ビルドには
https://github.com/Alexpux/MSYS2-packages/tree/master/wget
にあるPKGBUILDを

diff --git a/wget/PKGBUILD b/wget/PKGBUILD
index 0a1009ed..7c142e2a 100644
--- a/wget/PKGBUILD
+++ b/wget/PKGBUILD
@@ -1,7 +1,7 @@
 # Maintainer: Alexey Pavlov <alexpux@gmail.com>

 pkgname=wget
-pkgver=1.19.4
+pkgver=1.19.5
 pkgrel=1
 pkgdesc="A network utility to retrieve files from the Web"
 arch=('i686' 'x86_64')
@@ -18,12 +18,13 @@ source=(https://ftp.gnu.org/gnu/${pkgname}/${pkgname}-${pkgver}.tar.lz{,.sig}
         1.13.4-sysconfdir.patch
         wget-1.14-msys2.patch
         fix-gettext-version.patch)
-sha256sums=('2fc0ffb965a8dc8f1e4a89cbe834c0ae7b9c22f559ebafc84c7874ad1866559a'
+sha256sums=('29FBE6F3D5408430C572A63FE32BD43D5860F32691173DFD84EDC06869EDCA75'
             'SKIP'
             'c397093e82b50bcc6a4112a14b22d7426e67ce853d0dae65170aec6d7def4de8'
             '162f4e63fe759e2eb7a507179d02f840143ee914b7f9a32bbb65afbfd6aa3640'
-            'abedb6bae932fb3cda5d9c509fd0e7cd7fcf6f89c31feabc979ee624d5b130ef')
-validpgpkeys=('7845120B07CBD8D6ECE5FF2B2A1743EDA91A35B6') # Tim Rühsen <tim.ruehsen@gmx.de>
+            'SKIP' #'abedb6bae932fb3cda5d9c509fd0e7cd7fcf6f89c31feabc979ee624d5b130ef'
+            )
+validpgpkeys=('1CB27DBC98614B2D5841646D08302DB6A2670428') # Tim Rühsen <tim.ruehsen@gmx.de>

 prepare() {
   cd "${srcdir}/${pkgname}-${pkgver}"

のように書き換えビルドを試みたところ、

checking for libssl... no
configure: error: --with-ssl=openssl was given, but SSL is not available.

と言われてしまいます。

該当箇所のconfigure.acを見ると

    AS_IF([test x$ssl_found != xyes], [
      dnl Now actually check for -lssl if it wasn't already found
      AC_LIB_HAVE_LINKFLAGS([ssl], [crypto], [
#include <openssl/ssl.h>
#include <openssl/x509.h>
#include <openssl/err.h>
#include <openssl/rand.h>
#include <openssl/des.h>
#include <openssl/md4.h>
#include <openssl/md5.h>
      ], [SSL_library_init ()])
      if test x"$LIBSSL" != x
      then
        ssl_found=yes
        AC_MSG_NOTICE([compiling in support for SSL via OpenSSL])
        AC_LIBOBJ([openssl])
        LIBS="$LIBSSL $LIBS"
        AC_CHECK_FUNCS([RAND_egd])
      elif test x"$with_ssl" != x
      then
        AC_MSG_ERROR([--with-ssl=openssl was given, but SSL is not available.])
      fi
    ])

のようになっていたので、ここで新たに

#include <openssl/ssl.h>
#include <openssl/x509.h>
#include <openssl/err.h>
#include <openssl/rand.h>
#include <openssl/des.h>
#include <openssl/md4.h>
#include <openssl/md5.h>
int main(void)
{
    SSL_library_init();
    return 0;
}

というファイルを作成し、ビルドを試みると

$LC_ALL=C gcc `pkg-config --libs openssl` -std=c11 -v main.c
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-msys/7.3.0/lto-wrapper.exe
Target: x86_64-pc-msys
Configured with: /msys_scripts/gcc/src/gcc-7.3.0/configure --build=x86_64-pc-msys --prefix=/usr --libexecdir=/usr/lib --enable-bootstrap --enable-shared --enable-shared-libgcc --enable-static --enable-version-specific-runtime-libs --with-arch=x86-64 --with-tune=generic --disable-multilib --enable-__cxa_atexit --with-dwarf2 --enable-languages=c,c++,fortran,lto --enable-graphite --enable-threads=posix --enable-libatomic --enable-libcilkrts --enable-libgomp --enable-libitm --enable-libquadmath --enable-libquadmath-support --disable-libssp --disable-win32-registry --disable-symvers --with-gnu-ld --with-gnu-as --disable-isl-version-check --enable-checking=release --without-libiconv-prefix --without-libintl-prefix --with-system-zlib --enable-linker-build-id --with-default-libstdcxx-abi=gcc4-compatible
Thread model: posix
gcc version 7.3.0 (GCC)
COLLECT_GCC_OPTIONS='-std=c11' '-v' '-mtune=generic' '-march=x86-64'
 /usr/lib/gcc/x86_64-pc-msys/7.3.0/cc1.exe -quiet -v -Dunix -idirafter /usr/lib/../lib/../include/w32api -idirafter /usr/lib/gcc/x86_64-pc-msys/7.3.0/../../../../x86_64-pc-msys/lib/../lib/../../include/w32api main.c -quiet -dumpbase main.c -mtune=generic -march=x86-64 -auxbase main -std=c11 -version -o /tmp/ccv97hZn.s
GNU C11 (GCC) version 7.3.0 (x86_64-pc-msys)
        compiled by GNU C version 7.3.0, GMP version 6.1.2, MPFR version 4.0.1, MPC version 1.1.0, isl version isl-0.18-GMP

GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
ignoring nonexistent directory "/usr/local/include"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-pc-msys/7.3.0/../../../../x86_64-pc-msys/include"
ignoring duplicate directory "/usr/lib/gcc/x86_64-pc-msys/7.3.0/../../../../x86_64-pc-msys/lib/../lib/../../include/w32api"
#include "..." search starts here:
#include <...> search starts here:
 /usr/lib/gcc/x86_64-pc-msys/7.3.0/include
 /usr/lib/gcc/x86_64-pc-msys/7.3.0/include-fixed
 /usr/include
 /usr/lib/../lib/../include/w32api
End of search list.
GNU C11 (GCC) version 7.3.0 (x86_64-pc-msys)
        compiled by GNU C version 7.3.0, GMP version 6.1.2, MPFR version 4.0.1, MPC version 1.1.0, isl version isl-0.18-GMP

GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: 50a02b1294cf36a12a47154a3c365050
COLLECT_GCC_OPTIONS='-std=c11' '-v' '-mtune=generic' '-march=x86-64'
 /usr/lib/gcc/x86_64-pc-msys/7.3.0/../../../../x86_64-pc-msys/bin/as.exe -v -o /tmp/ccBaiDlz.o /tmp/ccv97hZn.s
GNU assembler version 2.28 (x86_64-pc-msys) using BFD version (GNU Binutils) 2.28
COMPILER_PATH=/usr/lib/gcc/x86_64-pc-msys/7.3.0/:/usr/lib/gcc/x86_64-pc-msys/7.3.0/:/usr/lib/gcc/x86_64-pc-msys/:/usr/lib/gcc/x86_64-pc-msys/7.3.0/:/usr/lib/gcc/x86_64-pc-msys/:/usr/lib/gcc/x86_64-pc-msys/7.3.0/../../../../x86_64-pc-msys/bin/
LIBRARY_PATH=/usr/lib/gcc/x86_64-pc-msys/7.3.0/:/usr/lib/gcc/x86_64-pc-msys/7.3.0/../../../../x86_64-pc-msys/lib/../lib/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-pc-msys/7.3.0/../../../../x86_64-pc-msys/lib/:/usr/lib/:/usr/lib/w32api/
COLLECT_GCC_OPTIONS='-std=c11' '-v' '-mtune=generic' '-march=x86-64'
 /usr/lib/gcc/x86_64-pc-msys/7.3.0/collect2.exe -plugin /usr/lib/gcc/x86_64-pc-msys/7.3.0/msys-lto_plugin.dll -plugin-opt=/usr/lib/gcc/x86_64-pc-msys/7.3.0/lto-wrapper.exe -plugin-opt=-fresolution=/tmp/ccTn1EGo.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lmsys-2.0 -plugin-opt=-pass-through=-ladvapi32 -plugin-opt=-pass-through=-lshell32 -plugin-opt=-pass-through=-luser32 -plugin-opt=-pass-through=-lkernel32 -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id -m i386pep --wrap _Znwm --wrap _Znam --wrap _ZdlPv --wrap _ZdaPv --wrap _ZnwmRKSt9nothrow_t --wrap _ZnamRKSt9nothrow_t --wrap _ZdlPvRKSt9nothrow_t --wrap _ZdaPvRKSt9nothrow_t -Bdynamic --dll-search-prefix=msys- --tsaware /usr/lib/../lib/crt0.o /usr/lib/gcc/x86_64-pc-msys/7.3.0/crtbegin.o -L/usr/lib/gcc/x86_64-pc-msys/7.3.0 -L/usr/lib/gcc/x86_64-pc-msys/7.3.0/../../../../x86_64-pc-msys/lib/../lib -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-pc-msys/7.3.0/../../../../x86_64-pc-msys/lib -L/usr/lib/w32api -lssl -lz -lcrypto -lz /tmp/ccBaiDlz.o -lgcc_s --undefined=___deregister_frame_info --undefined=___register_frame_info -lgcc -lmsys-2.0 -ladvapi32 -lshell32 -luser32 -lkernel32 -lgcc_s --undefined=___deregister_frame_info --undefined=___register_frame_info -lgcc /usr/lib/../lib/default-manifest.o /usr/lib/gcc/x86_64-pc-msys/7.3.0/crtend.o
/tmp/ccBaiDlz.o:main.c:(.text+0xe): undefined reference to `SSL_library_init'
/tmp/ccBaiDlz.o:main.c:(.text+0xe): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `SSL_library_init'
collect2: error: ld returned 1 exit status

undefined reference to `SSL_library_init'P

と言われます。-L/usr/lib/../lib-lsslは渡っており、

$pacman -Qs ssl
local/liblzo2 2.10-1 (libraries compression)
    Portable lossless data compression library
local/libopenssl 1.0.2.m-1 (libraries)
    The Open Source toolkit for Secure Sockets Layer and Transport Layer Security
local/mingw-w64-i686-lz4 1.8.2-1
    Very fast lossless compression algorithm (mingw-w64)
local/mingw-w64-i686-lzo2 2.10-1
    Portable lossless data compression library (mingw-w64)
local/mingw-w64-i686-openssl 1.0.2.o-1
    The Open Source toolkit for Secure Sockets Layer and Transport Layer Security (mingw-w64)
local/mingw-w64-x86_64-lz4 1.8.2-1
    Very fast lossless compression algorithm (mingw-w64)
local/mingw-w64-x86_64-lzo2 2.10-1
    Portable lossless data compression library (mingw-w64)
local/mingw-w64-x86_64-openssl 1.0.2.o-1
    The Open Source toolkit for Secure Sockets Layer and Transport Layer Security (mingw-w64)
local/mingw-w64-x86_64-szip 2.1.1-1
    Extended-Rice lossless compression algorithm implementation (mingw-w64)
local/mingw-w64-x86_64-wavpack 5.1.0-1
    Audio compression format with lossless, lossy and hybrid compression modes (mingw-w64)
local/openssl 1.0.2.m-1
    The Open Source toolkit for Secure Sockets Layer and Transport Layer Security
local/openssl-devel 1.0.2.m-1 (development)
    Openssl headers and libraries
local/perl-IO-Socket-SSL 2.054-1 (perl-modules)
    Nearly transparent SSL encapsulation for IO::Socket::INET
local/perl-Net-SMTP-SSL 1.04-1 (perl-modules)
    SSL support for Net::SMTP
local/perl-Net-SSLeay 1.84-1 (perl-modules)
    Perl extension for using OpenSSL
local/ucl 1.03-2
    Portable lossless data compression library written in ANSI C

のようにpacmanでopenssl-develが入っていて、

$ls /usr/lib | grep ssl
libssl.a
libssl.dll.a
openssl/

のようにlibssl.aが存在し、

$objdump --syms /usr/lib/libssl.a | grep SSL_library_init
[  0](sec  1)(fl 0x00)(ty  20)(scl   2) (nx 1) 0x0000000000000000 SSL_library_init

のようにシンボルが存在しているにもかかわらずです。

どうすればlinkに成功するでしょうか?

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

手元の環境では

gcc main.c `pkg-config --libs openssl`


としたところコンパイルできました。

gccのライブラリ読み込み順はむずかしい

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/17 13:35

    確かにそれだと通る・・・なんじゃそれ。
    しかしそうするとconfigure.acはなんでコケているのだろう・・・

    キャンセル

  • 2018/05/17 15:19

    pkg-configでぐぐると、質問文のようにソースよりも前に付けるのが散見されるし
    gccのバージョンで-lオプションの扱いが変わったんじゃないだろうか

    強引ですがconfigureの冒頭で
    ac_cv_libssl=yes
    付けてconfigure実行
    src/Makefileから
    -lunistring
    を2個所消してビルドできました。

    キャンセル

  • 2018/05/17 17:18

    CentOSにgcc7.3.0を入れて試したけどmain.cが後でも良さげですね・・・
    mingw仕様か

    キャンセル

  • 2018/05/17 17:25

    いや、Ubuntu 16.04LTS gcc5.5.0, gcc7.3.0でも再現するのでmingw関係ないですね

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.53%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • C

    3657questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

  • OpenSSL

    107questions

    OpenSSLはSSL/TLSのプロトコルと一般的な暗号のライブラリを導入するオープンソースのソフトウェアのツールキットです。