Post

macOS pip3 sslkeylog 설치 오류

목차


content

python3.7 -m pip install sslkeylog 시 에러가 난다.

대충 주요 요지는 <openssl/ssl.h> 를 못찾는다는 것이다.

openssl을 설치했는데.. 경로를 못 잡아주는 것 같다. 헤더파일을 링킹 박아주면 될 듯 한데…

1
2
3
4
5
6
7
cal/opt/python@3.7/Frameworks/Python.framework/Versions/3.7/include/python3.7m -c _sslkeylog.c -o build/temp.macosx-13-x86_64-cpython-37/_sslkeylog.o
_sslkeylog.c:3:10: fatal error: 'openssl/ssl.h' file not found
#include <openssl/ssl.h>
         ^~~~~~~~~~~~~~~
1 error generated.
error: command '/usr/bin/clang' failed with exit code 1
[end of output]

해결 방법

openssltest.c 파일을 만들어서 테스트
아래 코드 복사

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <openssl/ssl.h>

int main(int argc, char *argv[]) {
    printf("OPENSSL_VERSION=%s\n", OPENSSL_VERSION_TEXT);
    printf("OPENSSL_VERSION_NUMBER=0x%.8lx\n", OPENSSL_VERSION_NUMBER);
#if OPENSSL_VERSION_NUMBER >= 0x10101000L
    printf("OpenSSL >= 1.1.1 = true\n");
#else
    printf("OpenSSL >= 1.1.1 = false\n");
#endif

    return 0;
}

아래 구문을 통해 컴파일
나는 에러 로그가 error: command '/usr/bin/clang' failed with exit code 1 으로 나와서 clang으로 컴파일 했다.
gcc로 에러가 나게 되면 gcc로 진행하면 된다.

1
2
3
4
5
6
7
8
clang $(python3.7-config --cflags --ldflags) -fPIE openssltest.c -o openssltest -v

#include "..." search starts here:
#include <...> search starts here:
 /usr/local/Cellar/python@3.7/3.7.16/Frameworks/Python.framework/Versions/3.7/include/python3.7m
 /Library/Developer/CommandLineTools/SDKs/MacOSX13.sdk/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/14.0.0/include
 /Library/Developer/CommandLineTools/SDKs/MacOSX13.sdk/usr/include

컴파일은 실패할거고 로그의 #include 부분을 보면 된다.

/usr/local/Cellar/python@3.7/3.7.16/Frameworks/Python.framework/Versions/3.7/include/python3.7m

python3.7의 헤더 파일 경로를 찾았다. 요 경로에 설치한 openssl 헤더 파일을 복사한다.

openssl 바이너리가 /opt/homebrew/opt/openssl@1.1/bin/ 디렉토리에 있으니 openssl 헤더 파일의 경우 /opt/homebrew/opt/openssl@1.1/include/ 디렉토리에 있을 것이다.

1
2
ls $(which openssl)
/opt/homebrew/opt/openssl@1.1/bin/openssl

링킹을 걸어준다.

1
2
cd `/usr/local/Cellar/python@3.7/3.7.16/Frameworks/Python.framework/Versions/3.7/include/python3.7m`
ln -s /opt/homebrew/Cellar/openssl@1.1/1.1.1t/include/openssl/

다시 컴파일하고 확인해본다.

1
2
clang $(python3.7-config --cflags --ldflags) -fPIE openssltest.c -o openssltest -v
./openssltest

정상적으로 컴파일 및 OPENSSL 버전이 출력된다.

1
2
3
OPENSSL_VERSION=OpenSSL 1.1.1t  7 Feb 2023
OPENSSL_VERSION_NUMBER=0x1010114f
OpenSSL >= 1.1.1 = true

이제 다시 pip3로 sslkeylog를 설치하면 잘 될것이다.

1
python3.7 -m pip install sslkeylog
This post is licensed under CC BY 4.0 by the author.