bundle install에서 mysql2gem은'ld:library not found for-limported_Openssl`에서 실패한 문제를 강제로 해결하다

개요

  • Homebrew에 설치된 MySQL을 5.7에서 5.6으로 낮추는 동안 문제 오류가 발생했습니다
  • 급해서 보기 드문 바드 팁으로 없앴다
  • 환경

  • macOS Catalina 10.15
  • ruby 2.4.2
  • Rails 4.2.11
  • MySQL 5.6.46
  • rbenv 1.1.2
  • Homebrew 2.1.15
  • 갑작스런 처리 방법

  • brew 명령으로 MySQL5.6
  • 제거
  • rbenv 명령으로 루비2.4.2
  • 재설치
  • brew 명령으로 MySQL5.6
  • 설치

  • 수정mysql_config(후술)
  • bundle config --delete build.mysql2 필요는 없지만 기분이 좋다(환경에 따라 필요할 수 있다)
  • bundle install


  • 컨텐트 수정
    /usr/local/Cellar/[email protected]/5.6.46/bin/mysql_config
    123行目
    - libs=" $ldflags -L$pkglibdir  -lmysqlclient  -limported_openssl -limported_crypto "
    + libs=" $ldflags -L$pkglibdir  -lmysqlclient  "
    
    126行目
    - libs_r=" $ldflags -L$pkglibdir  -lmysqlclient  -limported_openssl -limported_crypto   "
    + libs_r=" $ldflags -L$pkglibdir  -lmysqlclient  "
    

    여기서부터 자세히 설명해주세요.

    bundle install의 일지는 이런 느낌이다.
    Installing mysql2 0.3.20 with native extensions
    Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
    (...略)
    checking for ruby/thread.h... yes
    checking for rb_thread_call_without_gvl() in ruby/thread.h... yes
    checking for rb_thread_blocking_region()... no
    checking for rb_wait_for_single_fd()... yes
    checking for rb_hash_dup()... yes
    checking for rb_intern3()... yes
    -----
    Using mysql_config at /usr/local/opt/[email protected]/bin/mysql_config
    -----
    checking for mysql.h... yes
    checking for errmsg.h... yes
    checking for mysqld_error.h... yes
    -----
    Don't know how to set rpath on your system, if MySQL libraries are not in path mysql2 may not load
    -----
    -----
    Setting libpath to /usr/local/opt/[email protected]/lib
    -----
    creating Makefile
    (...略)
    ld: warning: directory not found for option '-L/usr/local/opt/[email protected]/lib'
    ld: library not found for -limported_openssl
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    make: *** [mysql2.bundle] Error 1
    
    make failed, exit code 2
    

    두 가지 문제가 있어요.


    1. 근절할 MySQL5.7 문제
    ld: warning: directory not found for option '-L/usr/local/opt/[email protected]/lib'
    
    갑자기 등장했어.다음 5.7 메시지를 썼기 때문입니다.
    ~/.rbenv/versions/2.4.2/lib/pkgconfig/ruby-2.4.pc
    50行目
    DLDFLAGS=-L/Users/choripon/.rbenv/versions/2.4.2/lib -L/usr/local/opt/[email protected]/lib -Wl,-undefined,dynamic_lookup -Wl,-multiply_defined,suppress
    
    루비를 설치할 때의 매개 변수가 영향을 미쳤을 수도 있지만, 지금은 수수께끼입니다.루비 재가입으로 해결했습니다.
    2. 자신이 누구인지의 문제
    ld: library not found for -limported_openssl
    
    상당히 수수께끼이기 때문에 최종 수단grep -ir 'imported_openssl' / 2>/dev/null의 발동이 인정되었습니다. 안전하게 때린 mysql_config 수정으로 해결했습니다.Using mysql_config at /usr/local/opt/[email protected]/bin/mysql_config의 로그 출력은 비밀이라는 것을 오랫동안 알아차렸다)
    여기서 마치겠습니다.

    끝내다


    이번에 장난친 mysql_config가 잠시 후 복구되었습니다.
    그리고 전혀 상관없어요, mkmf.log는 마음속에서'부은 복어'라고 불린다.

    좋은 웹페이지 즐겨찾기