Eclipse에서 SVN을 사용하기 위해 subclipse를 설치하고 나서 이클립스를 실행시킬 때마다 JavaHL 오류(Failed to load javaHL Library)가 발생하면 아래와 같이 해결할 수 있다.

 

 

우분투 20.04에서 수행하였다.

 

$ sudo apt install -y libsvn-java

 

JNI 경로 검색

 

$ whereis jni

 

이클립스 폴더에서 eclipse.ini 파일을 에디터로 열고 아래를 추가한다.

path 에는 본인에게 맞는 jni 디렉터리를 입력한다.

 

-Djava.library.path=/usr/lib/x86_64-linux-gnu/jni

 

 

참고: https://github.com/subclipse/subclipse/wiki/JavaHL-on-Linux

파이썬3 pip 업그레이드 시 발생하는 오류 해결 방법은 다음과 같다.

사용 환경은 Ubuntu 16.04 입니다.

 

$ python3 -m pip install --upgrade pip

 

Traceback (most recent call last): File "/usr/lib/python3.5/runpy.py", line 184, in _run_module_as_main "__main__", mod_spec) File "/usr/lib/python3.5/runpy.py", line 85, in _run_code exec(code, run_globals) File "/home/sh/.local/lib/python3.5/site-packages/pip/__main__.py", line 21, in from pip._internal.cli.main import main as _main File "/home/sh/.local/lib/python3.5/site-packages/pip/_internal/cli/main.py", line 60 sys.stderr.write(f"ERROR: {exc}") ^ SyntaxError: invalid syntax

 

위와 같이 오류가 발생하면 아래와 같이 명령어를 입력한다.

 

$ wget https://bootstrap.pypa.io/pip/3.5/get-pip.py 

$ python3 get-pip.py

 

아래와 같이 최신 버전의 pip를 설치한다.

 

 

이후 pip3 명령어를 입력하면 정상적으로 동작하는 것을 볼 수 있다.

 

pdf 파일에서 텍스트를 복사할 때 아래와 같이 줄 바꿈이 되는 경우가 발생합니다. 

 

 

위와 같이 여러 문장을 복사하고 붙여넣으면 아래와 같이 on the precision of profiling 부분이 줄이 바뀌어 버립니다.

 

 

이럴 때는 조금 번거롭지만 Sublime text와 같은 도구로 해당 부분을 한 번에 해결할 수 있습니다.

저는 Sublime text 3를 사용했고 www.sublimetext.com/3에서 다운로드할 수 있습니다.

 

위의 pdf 파일 내용을 sublime text에 붙여 넣기 합니다.

 

이제 마우스 드래그로 전체 선택을 하거나 단축키 Ctrl + A를 눌러 모든 텍스트를 선택합니다.

 

 

이상태에서 Ctrl + Shift + L을 누르면 아래와 같이 모든 커서가 문장의 맨 뒤로 이동합니다.

 

그러면, 오른쪽 방향키를 한번 눌러서 드래그 상태를 해제하고, delete 키를 눌러서 공백을 삭제합니다.

 

이후 스페이스를 한번 눌러서 간격을 조정합니다.

 

 

정리를 하면 다음과 같습니다.

1. 모든 텍스트 선택

2. 컨트롤+쉬프트+L을 누름

3. 오른쪽 방향키 누름

4. 딜리트 키 누름

5. 스페이스 바 누름

  1. 2021.03.04 18:48

    비밀댓글입니다

 

LLVM에서 Pass를 컴파일하고 (*.so) 아래의 명령어를 사용해 IR 코드를 분석할 수 있다.

 

$ opt -load *.so -PASSNAME *.ll (혹은 *.bc)

 

PASSNAME 부분에는 코드에서 RegisterPass에서 지정한 이름을 입력하면 된다.

 

만약 아래와 같이 Hello라고 등록을 하였으면 

static RegisterPass<HelloModule> X("Hello", "Hello World Pass "); 

 

$ opt -load HelloModule.so -hello *.ll 

 

과 같이 실행하면 된다.

 

단순히 Pass를 적용한 결과를 보고 싶으면 위의 명령어를 사용하면 되지만, 아래와 같은 경고가 뜬다.

 

WARNING: You're attempting to print out a bitcode file. This is inadvisable as it may cause display problems. If you REALLY want to taste LLVM bitcode first-hand, you can force output with the `-f' option.

 

분석에 지장은 없지만, 경고가 거슬리는 경우 아래와 같이 실행해서 output을 명시한다.

 

$ opt -load HelloModule.so -hello < *.ll > /dev/null

 

 

Pass를 적용한 코드를 생성하기 위해서는 아래와 같이 opt의 인자로 -o를 사용한다.

 

$ opt -load HelloModule.so -hello original.ll -o original.opt.ll

 

그러면 Pass가 적용된 original.opt.ll이 생성되고, clang 으로 컴파일해서 실행하면 된다.

 

'IT > LLVM' 카테고리의 다른 글

LLVM Pass 실행  (0) 2020.09.11
LLVM clang IR(*.ll) 변환  (0) 2020.09.11
LLVM basic block call flow graph  (0) 2020.09.07
IR, LL, LLVM

 

Case 1:

$ clang clang -c -emit-llvm main.c -o main.bc

$ llvm-dis main.bc

 

Case 2:

$ clang -S -emit-llvm -Xclang -disable-O0-optnone main.c

'IT > LLVM' 카테고리의 다른 글

LLVM Pass 실행  (0) 2020.09.11
LLVM clang IR(*.ll) 변환  (0) 2020.09.11
LLVM basic block call flow graph  (0) 2020.09.07