Linux Kernel 빌드 시 Library 파일의 확장자 바꾸기

Linux Kernel을 빌드하면 내부에 포함된 Driver, Library, System File 등 여러 파일들이 자동으로 컴파일된다.

그 중 Library는 보통 확장자가 .so 이지만, 이 확장자를 임의로 바꿔줄 수 있다.

커널 빌드시 다른 component들의 빌드에 대한 설정은 보통 아래 두 파일에서 한다.

  • linux/makerules/linux_env.mk
  • linux/makerules/user_mode_rules.mk

이 중 user_mode_rules.mk의 대략 line 165를 보면 다음과 같은 코드가 있다.

“`
PROG = $(OBJDIR)/$(TARGET)
ifneq (1,$(LINK_STATIC_EXECUTABLE))
PROG_PARTIAL = $(PROG).partial.o
endif
ifeq (1,$(BUILD_SHARED_LIB))
LIB = $(OBJDIR)/$(TARGET).so
LIB_A = $(OBJDIR)/$(TARGET).a
else
LIB = $(OBJDIR)/$(TARGET).a
endif
ifeq (1,$(BUILD_SWIG_PROG))
SWIG_PROG = $(OBJDIR)/$(TARGET).so
OBJS += $(OBJDIR)/$(addsuffix .o, $(basename $(SWIG_WRAP_SRC)))
endif
“`

여기서 $(OBJDIR)/$(TARGET).so 이 부분을 수정하면 된다.

 


추가로, 직접 빌드하려는 library의 Makefile에 변수를 추가한 다음에 user_make_rules.mk에서 조건문 처리를 하면 특정 라이브러리만 다른 확장자로 바꿀 수 있다.

예를 들어

linux/target/syslibs/lib_xx/Makefile

에다가

XX_LIB_SO_1 := 1

이런 코드를 추가하고, user_make_rules.mk 에다가

ifeq (1,$(XX_LIB_SO_1))
LIB = $(OBJDIR)/$(TARGET).so.1
else
LIB = $(OBJDIR)/$(TARGET).so
endif

라고 추가하면 해당되는 것만 .so.1로 빌드된다.