카테고리 보관물: Tools & Tips

Mac OSX에서 numpy 설치할 때 빌드 실패 문제

Intel Mac에서 pip로 numpy(ver1.22)를 설치하려고 했더니 설치에 실패하면서 아주 아주 긴 오류가 나오는데 Clang compiler option의 architecture flag가 좀 이상하다.

% python3 -m pip install numpy
...
 clang -Wno-unused-result -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -iwithsysroot/System/Library/Frameworks/System.framework/PrivateHeaders -iwithsysroot/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.8/Headers -arch arm64 -arch x86_64 ...
  clang: error: the clang compiler does not support '-march=native'
...

“-arch arm64 -arch x86_64” 라는 건 Apple silicon과 Intel architecture를 모두 지원해 보겠다는 뜻인가? 혹시나 해서 환경 변수로 ARCHFLAGS=”-arch x86_64″를 주고 재 실행해 봤더니 이전에 있던 -march=native 플래그가 지원되지 않는다는 에러가 없어지면 잘 설치가 되었다.

% ARCHFLAGS="-arch x86_64" python3 -m pip install numpy

좀 더 일반적으로 적용될 수 있는 다른 방법으로 “–only-binary” 옵션을 주어서 wheel package file build를 안 하도록 하는 방법도 고려해 볼 수 있겠다.

% pip install numpy --only-binary numpy
Collecting numpy
  Downloading numpy-1.22.4-cp38-cp38-macosx_10_15_x86_64.whl (17.6 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 17.6/17.6 MB 30.0 MB/s eta 0:00:00
Installing collected packages: numpy
Successfully installed numpy-1.22.4

Visual Studio Code test explorer에서 explorer로 변경되는 문제

최근 업데이트(1.65.2) 이후 부터 였던 것 같은데 VSCode의 test explorer에서 테스트를 실행하면 자꾸만 explorer로 자동 변경되는 문제가 생겼다.

이 문제는 새롭게 생긴 설정인 testing.openTesting을 neverOpen으로 변경해 주면 해결된다.

{ // settings.json
   ...
    "testing.openTesting": "neverOpen"
}

또는

Setings -> Features -> Testing -> Testing: Open Testing

왜 이런 짓을??

정보의 바다에서 이와 관련해 의견을 나눈 기록을 찾았는데 Switching to test explorer when users clicks ‘run tests’에 따르면 커스터머 인터뷰 중에 IntelliJ에 구현된 이와 관련된 유사한 기능이 요청된 모양이다. 다행히도 이 기능이 VSCode에서는 오히려 불편하기만 할꺼라는 의견을 가진 사람 덕분에 option으로 빠지게 되었는데 default 값은 이 기능이 동작하는 openOnTestStart로 되어 버렸다. 변경 사항에 관련된 ticket은 여기에서 찾을 수 있다.

Windows DLL loading 실패 디버깅

Windows programming 중에 DLL loading을 실패해서 오류가 발생하면 문제가 생겼다는 에러코드(0xc0000135)만 출력되고 어떤 것이 실패했는지 또 어느 곳을 찾아 봤는지에 대한 정보는 자세히 알려주지 않는다.

Windows SDK에 포함된 gflags.exe(Global Flags)를 이용하면 DLL loading에 대한 세부정보를 볼 수 있다. gflags.exe가 실행하는데 admin권한을 필요로 하기 때문에 관리자 권한으로 터미널을 띄우고 Windows SDK안에 포함되어 있는 gflags.exe를 다음과 같이 실행해서 세부 내역을 보고 싶은 실행파일의 이름과 sls(Show Loader Snaps) option을 명시 해준다.

C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\gflags.exe -i <프로그램이름.exe> +sls
Current Registry Settings for <프로그램이름.exe> executable are: 00000002
    sls - Show Loader Snaps

다시 Visual studio로 돌아와서 프로그램을 실행하면 Output window에 DLL loading에 실패한 라이브러리의 이름과 시도해본 path들에 대한 세부정보가 표시된다.

8e9c:55d4 @ 621281687 - LdrpFindKnownDll - ENTER: DLL name: <실패하는 라이브러리>.dll
8e9c:55d4 @ 621281687 - LdrpFindKnownDll - RETURN: Status: 0xc0000135
8e9c:55d4 @ 621281687 - LdrpFindKnownDll - ENTER: DLL name: vccorlib140d_app.DLL
8e9c:55d4 @ 621281687 - LdrpFindKnownDll - RETURN: Status: 0xc0000135
8e9c:55d4 @ 621281687 - LdrpFindKnownDll - ENTER: DLL name: MSVCP140D_APP.dll
8e9c:55d4 @ 621281687 - LdrpFindKnownDll - RETURN: Status: 0xc0000135

이전 상태로 되돌리려면 옵션을 `-sls`로 변경해서 다시 한 번 gflgas.exe를 실행해 주면 된다.

C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\gflags.exe -i ieproxytest.exe -sls
Current Registry Settings for ieproxytest.exe executable are: 00000000

저장공간 문제로 XCode 재 설치가 실패 할 때

XCode를 재설치 할 때 가능한 저장공간이 25GB이상 있음에도 저장공간이 부족해서 설치할 수 없다는 에러가 나온다면 제대로 삭제되지 않은 이전의 정보 때문일 수도 있다.

Uninstall xcode 10에 있는 내용을 참고해서 ~/Library/안에 있는 관련한 파일들을 삭제해주고 나니 저장공간에 대한 에러메세지 없이 잘 설치 되었다. /System/Library/안에 있는 파일들은 SIP 관련으로 그냥 삭제할 수 없고 복구모드로 부팅해서 csrutil을 실행해 주어야 한다는데 그냥 안해도 문제 없이 잘 되었다.

다음의 파일을 지우고 한번 시도해보자.

/Applications/Xcode.app 
~/Library/Caches/com.apple.dt.Xcode
~/Library/Developer
~/Library/MobileDevice
~/Library/Preferences/com.apple.dt.Xcode.plist
/Library/Preferences/com.apple.dt.Xcode.plist

Mac OSX terminal로 Emacs 사용 할 때 meta key 변경

서버에 있는 원격 파일을 편집 할 때 대부분은 Mac용 Emacs에서 Tramp mode로 할 수 있지만, 가끔씩 서버에 접속한 터미널에서 직접 Emacs를 띄우는 경우가 있는데 이 때는 ESC key가 meta로 할당 되어서 도무지 적응 하기가 힘들다. 이 때는 terminal의 Profiles -> Keyboard에서 아랫 쪽에 있는 “Use Option as Meta key”를 설정하면 ESC 대신 Option key를 Meta key로 사용할 수 있다.