LXR(Linux Corss-Referencer)은 대규모 소스코드를 웹 브라우저에서 편하게 인덱싱하고 검색할 수 있도록 도와주는 코드 참조도구다. 상호참조하여 소스코드 분석을 쉽게 할 수 있도록 도와주는 도구다. 현재까지 C언어 프로젝트를 LXR에 올려서 소스코드를 분석하니 참으로 편리하다.
(LXR 공식 사이트 https://lxr.linux.no/)
오픈소스 예제 사이트(https://elixir.bootlin.com/linux/v7.1.3/source/include/clocksource/timer-xilinx.h)는 최신버전 LXR을 체험할수 있는 사이트인데 함수나 파일들을 어떻게 인덱스화 해서 파일을 참조하며 찾아가는지 체험해보기 좋다.
C언어 소스코드는 make를 하기위해 리눅스에 소스관리를 하는데.. 예전에 C언어 소스를 가상머신 VMware나 VirtualBox에 리눅스를 올려서 사용했다면 요즘에는 Window에서 지원하는 WSL을 구축한 다음 여기에 소스관리를 하는것 같다.
이번에 C언어 소스분석을 위해 여러 툴 VisualSudio, VsCode, Source-Insight들을 사용해봤으나, LXR이란걸 구축해서 브라우저에 여러개 띄워놓고 소스들을 추적해나가면서 분석하는것이 더 좋았던것같다. LXR은 구축하는게 손이 많이 가니 기록하기 위해서 글을 남긴다.
JAVA의 경우에는 LXR에 최적화 되어있지 않다고 되어있으나 호기심에 올려봤는데 함수들 추적이 제대로 안되니 안쓰는게 좋은것 같다. 안되는 이유는 AI에게 물어보니 다음과 같았다.
동적 바인딩 및 복잡한 객체지향 구조: LXR은 변수명이나 함수명을 텍스트 단위로 매칭하여 하이퍼링크를 생성하는 정적 분석 방식을 사용합니다. Java의 다형성(Polymorphism), 상속(Inheritance), 오버라이딩(Overriding) 등으로 인해 런타임에 결정되는 메서드 호출을 정확히 추적하지 못합니다.
복잡한 패키지 및 import 의존성:Java는 디렉토리 구조와 패키지 이름이 엄격하게 일치해야 하며 import 구문을 통해 외부 라이브러리를 가져옵니다. LXR은 소스코드 간의 이러한 복잡한 참조 관계나 클래스패스(Classpath)를 이해하지 못해 심볼 추적에 실패하기 쉽습니다.
핵심 엔진(Ctags)의 한계: LXR의 식별자 파싱은 주로 Exuberant Ctags 또는 Universal Ctags에 의존합니다. Ctags는 C/C++에 특화되어 있어 Java의 제네릭(Generics), 익명 클래스, 람다식 등 복잡한 최신 문법을 정밀하게 분석하기 어렵습니다.
실행 문맥(Context) 파악 불가: LXR은 단순히 일치하는 모든 식별자를 링크로 묶어줄 뿐, 실제 컴파일러처럼 해당 심볼이 어떤 객체의 메서드인지 정확한 문맥을 파악하지 못합니다.
🔹 LXR 설치
1) LXR 다운로드
해당 글에서는 예전 버전인 0.3버전으로 구축하며 공식사이트에서 다운로드를 지원한다.
https://sourceforge.net/projects/lxr/files/old/lxr-0.3/
하지만, 초반 구축을 하는데 여러 설정이 필요하니 기본 셋팅이 되어 있는 압축파일로 설치했다.
셋팅이 다 되어있으니 아래 압축파일을 다운받는 것을 추천.
압축 푸는것은 Apache2 설치 이후에 진행한다.
2) perl & glimpse 모듈 설치
LXR 구축전 WSL에 접속해서 사용하는 Linux환경에 Perl 모듈과 Glimpse 모듈을 설치해야 한다.
apt를 이용해서 설치하자. 아래는 설치해야되는 이유 첨부.
# 패키지목록 최신화
sudo apt update
# perl 설치
sudo apt install perl
# glimpse 설치
sudo apt install glimpse
⚙️ perl 주요 역할 및 동작
- 웹 인터페이스 및 CGI 구동: LXR은 웹 브라우저를 통해 소스 코드를 보여줍니다. 이때 사용자의 요청(클릭, 검색 등)을 받아 화면을 동적으로 생성하는 스크립트가 Perl로 작성되어 있습니다.
- 소스 코드 구문 분석 (Parsing): C, C++, Java 등 다양한 언어의 소스 코드를 읽어 들여 함수, 변수, 매크로 등을 식별하는 기본적인 로직을 처리합니다.
- 데이터베이스 및 외부 도구 연동: Glimpse나 일반 DB(MySQL 등)와 LXR 핵심 기능을 연결해 주는 징검다리 역할을 합니다.
⚙️ glimpse 주요 역할 및 동작
- 초고속 풀 텍스트(Full-text) 검색: 리눅스 커널처럼 수만 개의 파일로 이루어진 거대한 소스 코드에서 grep 같은 일반 명령어로 검색하면 시간이 너무 오래 걸립니다. Glimpse는 미리 소스 코드의 단어들을 인덱스(색인) 파일로 만들어 두어, 사용자가 단어를 검색했을 때 1초도 안 되는 시간에 해당 위치를 찾아냅니다.
- 정규식 검색 지원: 단순 단어뿐만 아니라 복잡한 패턴(정규표현식)을 이용한 코드 검색을 가능하게 합니다.
- 효율적인 디스크 공간 활용: Glimpse는 다른 검색 엔진에 비해 인덱스 파일의 크기가 매우 작아서(원본 코드 크기의 약 2~7% 수준) 서버의 메모리와 디스크 공간을 크게 절약합니다.
3) Apache2 설치
LXR을 웹상에서 보려면 WAS(Web Application Server) 설치를 해야한다.
설치방법은 어렵지 않다.
# WSL 접속한 상태에서 명령어 실행
sudo apt install apache2
4) LXR 디렉토리에 설치
이제 Apache2를 설치했으면 WSL에 /var 경로에 www 디렉토리가 생성되었다.

다음은 /var/www/html 경로 하위에 다운받은 lxr 압축파일을 풀어주면된다.
위 글 1) LXR 다운로드에서 셋팅 되어있는 압축파일을 사용했다.
압축푸는 방법은 간단하다.
다운받은 압축파일을 간단한 경로( ex) C:\wsl )에 두고 wsl에 접속해서 아래 명령어를 치면된다.
wsl은 /mnt 경로에 c드라이브와 d드라이브 등이 있고 연동이 되기때문에 C드라이브에 wsl폴더에 압축파일이 있다면
/mnt/c/wsl/lxr.tar 로 접근이 가능하다.
# WSL 접속후 명령어 실행
# /var/www/html 경로에 lxr 디렉토리 생성
sudo mkdir /var/www/html/lxr
# lxr 경로에 압축해제
sudo tar -zxvf /mnt/c/wsl/lxr.tar /var/www/html/lxr/

여기까지하면 LXR 설치는 완료 되었다.
apache2 실행 후 본인 PC에서 http://127.0.0.1/lxr/http/source/ 로 접속해보면 정상 동작중인지 확인가능하다.
아래처럼 웹페이지가 보이면 성공.

🔹 에러 Case
1) 페이지가 안 뜰 경우
페이지조차 안뜬다면 apache2가 정상적으로 설치되있거나 apache2가 실행중인지 확인.
# apache2 재시작
sudo service apache2 restart
# apache2 상태 확인
sudo service apache2 status
2) 링크 주소 확인
별다른 설정을 하지 않았다면 127.0.0.1 이나 localhost 로 접속이 가능하다.
lxr은 뒤에 주소 /lxr/http/source를 붙여준다.
http://localhost/lxr/http/source
3) NotFound 에러
http://localhost/ 까지 접속했을때 기본 페이지가 뜨고 뒤에 주소 /lxr/http/source/ 붙였을때 안뜨면 설정을 제대로 했는지 확인해본다.
4) 파일이 안보이거나 화면이 정렬이 안된 경우
디렉토리 목록은 보이나 파일들이 안보이고, 정렬이 안된경우에는 perl과 glimpse가 정상적으로 설치되있는지 확인 필요.
다음은 LXR에 프로젝트 올리고 각종 설정하는 법들을 정리할 예정이다.
2026.07.15 - [프로그래밍/Linux] - Windows에 WSL2 설치 방법
'프로그래밍 > Linux & WSL' 카테고리의 다른 글
| Windows에 WSL2 설치 방법 (0) | 2026.07.15 |
|---|