안녕하세요 남들은 라즈베리 파이같은 것에 설치를 할때 갤럭시 A35를 이용해서 AI 머신으로
그리고 엣지 AI 등등을 하기위해 터뮤즈를 이용하여 BitNet cpp 를 Ninja를 이용하여 빌드하는 도중
오류가 발생하여 공유 드리고자 합니다.
1. 사건발달
- A35 에서 이런저런 셋팅을 완료하고 빌드중 오류발생
ninja
-- The C compiler identification is Clang 21.1.8
-- The CXX compiler identification is Clang 21.1.8
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /data/data/com.termux/files/usr/bin/clang - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /data/data/com.termux/files/usr/bin/clang++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Failed
-- Check if compiler accepts -pthread
-- Check if compiler accepts -pthread - yes
-- Found Threads: TRUE
-- Found Git: /data/data/com.termux/files/usr/bin/git (found version "2.53.0")
-- Found OpenMP_C: -fopenmp=libomp (found version "5.1")
-- Found OpenMP_CXX: -fopenmp=libomp (found version "5.1")
-- Found OpenMP: TRUE (found version "5.1")
-- OpenMP found
-- Using llamafile
-- Warning: ccache not found - consider installing it for faster compilation or disable this warning with GGML_CCACHE=OFF
-- CMAKE_SYSTEM_PROCESSOR: aarch64
-- ARM detected
-- Performing Test COMPILER_SUPPORTS_FP16_FORMAT_I3E
-- Performing Test COMPILER_SUPPORTS_FP16_FORMAT_I3E - Failed
-- Performing Test GGML_COMPILER_SUPPORT_DOTPROD
-- Performing Test GGML_COMPILER_SUPPORT_DOTPROD - Failed
-- Performing Test COMPILER_SUPPORTS_ARMV82_DOTPROD
-- Performing Test COMPILER_SUPPORTS_ARMV82_DOTPROD - Success
-- Configuring done (15.5s)
CMake Error at 3rdparty/llama.cpp/ggml/src/CMakeLists.txt:1335 (add_library):
Cannot find source file:
../../../../include/bitnet-lut-kernels.h
Tried extensions .c .C .c++ .cc .cpp .cxx .cu .mpp .m .M .mm .ixx .cppm
.ccm .cxxm .c++m .h .hh .h++ .hm .hpp .hxx .in .txx .f .F .for .f77 .f90
.f95 .f03 .hip .ispc
CMake Error at 3rdparty/llama.cpp/ggml/src/CMakeLists.txt:1335 (add_library):
No SOURCES given to target: ggml
CMake Generate step failed. Build files cannot be regenerated correctly.
ninja: error: loading 'build.ninja': No such file or directory

2. 원인
빌드중 bitnet-lut-kernels.h이 파일에 대해서 없다고 뜨는 오류다.
정확한 원인: spm-headers/bitnet-lut-kernels.h는 ‘진짜 파일’이 아니라 깨진 심볼릭 링크였기 때문입니다.
실제 파일이 아니라, 다음과 같은 symlink(링크 파일)
~/projects/BitNet $ find . -name "bitnet-lut-kernels.h" ./3rdparty/llama.cpp/spm-headers/bitnet-lut-kernels.h
~/projects/BitNet $ find . -name "bitnet-lut-kernels.h"
(결과)./3rdparty/llama.cpp/spm-headers/bitnet-lut-kernels.h
이렇게 파일을 검색해보니 있다고 나타났다. 그래서 아그냥 저기위치에 복사해놓자! 생각을하고
~/projects/BitNet $ cp 3rdparty/llama.cpp/spm-headers/bitnet-lut-kernels.h include/
유령파일이었던것!!!
>> cp: cannot stat '3rdparty/llama.cpp/spm-headers/bitnet-lut-kernels.h': No such file or directory
find는 왜 찾았나? (겉모습만 보기 때문에)
이 명령은 파일 이름만 보면 찾습니다.
이게 진짜 regular file인지 깨진 링크인지 링크 대상이 없는지 상관없이
그냥 이름이 bitnet-lut-kernels.h인 엔트리면 표시합니다.
그래서 find에는 나왔습니다.
cp는 왜 실패했나? (링크를 따라가서 진짜 파일 내용을 복사해야 하기 때문에)
cp는 기본적으로: 링크 자체를 복사하는 게 아니라 링크가 가리키는 실제 파일의 내용을 읽어서 복사합니다.
그런데: ../../../include/bitnet-lut-kernels.h 이 진짜 파일이 없었기 때문에, cp는 링크를 따라가다 에러 낸 것입니다.
그래서 정확한 에러 메시지가
cp: cannot stat '3rdparty/llama.cpp/spm-headers/bitnet-lut-kernels.h': No such file or directory
여기서 stat 실패 = 링크가 가리키는 진짜 파일이 없음 → 깨진 링크 → 복사 불가!!
3. 해결방법!!!!
강제
#1. 오염된 지역 소각 및 재건 (Clean Start)
cd ~/projects
rm -rf BitNet # 아예 싹 밀어버리세요. 미련 갖지 마십시오.
# 메인 레포만 먼저 받습니다.
git clone https://github.com/microsoft/BitNet.git
cd BitNet
#2. 탈영병(서브모듈) 강제 징집 (Force Submodule)
git submodule update --init --recursive
# [확인] 여기서 아래 명령어를 쳤을 때 파일들이 쫙 나와야 합니다.
ls -R 3rdparty/llama.cpp | head -n 20
#3. 설계도(헤더) 수동 이식 (Manual Surgery)
mkdir -p include
# 1) 진짜 헤더 파일들 찾아서 복사 (화살표 링크 무시하고 내용물 복사)
cp 3rdparty/llama.cpp/spm-headers/bitnet-lut-kernels.h include/ 2>/dev/null || find . -name "bitnet-lut-kernels-tl1.h" -exec cp {} include/bitnet-lut-kernels.h \;
cp 3rdparty/llama.cpp/spm-headers/ggml-bitnet.h include/ 2>/dev/null || find . -name "ggml-bitnet.h" -exec cp {} include/ \;
find 3rdparty/llama.cpp -name "gemm-config.h" -exec cp {} include/ \;
# [확인] 이 파일들이 다 있는지 보세요. 하나라도 없으면 빌드 안 됩니다.
ls -l include/bitnet-lut-kernels.h include/ggml-bitnet.h include/gemm-config.h
#4. Clang 21 및 시간 함수 패치 (독기 주입)
# Clang 21의 const 관련 발작 해결
sed -i 's/void ggml_compute_forward_get_rows_i2_s(struct ggml_compute_params/void ggml_compute_forward_get_rows_i2_s(const struct ggml_compute_params/g' 3rdparty/llama.cpp/ggml/src/ggml.c
sed -i 's/void ggml_compute_forward_mul_mat_i2_s(struct ggml_compute_params/void ggml_compute_forward_mul_mat_i2_s(const struct ggml_compute_params/g' 3rdparty/llama.cpp/ggml/src/ggml.c
# Termux 전용 시간 함수 패치
sed -i 's/std::chrono::high_resolution_clock/std::chrono::steady_clock/g' 3rdparty/llama.cpp/common/common.cpp
sed -i 's/std::chrono::high_resolution_clock/std::chrono::steady_clock/g' 3rdparty/llama.cpp/common/log.cpp
#5. 대망의 닌자 빌드 (The Final Charge)
cd ~/projects/BitNet/build
# 1. 찌꺼기 싹 비우기 (진정한 완주를 위해)
rm -rf *
# 2. 설계도 다시 그리기
cmake .. -G "Ninja" \
-DCMAKE_C_COMPILER=clang \
-DCMAKE_CXX_COMPILER=clang++ \
-DBITNET_ARM_DOTPROD=ON \
-DCMAKE_BUILD_TYPE=Release
# 3. 대망의 '노 빠꾸' 120번 완주 질주!
# 뒤에 아무것도 안 붙여야 모든 타겟을 다 빌드합니다.
echo -e "\e[1;31m[!] 엑시노스 1380 고문 모드 가동... 120번까지 멈추지 않습니다.\e[0m"
ninja
이럼 이제 쭈루루룩뜨면서 빌드성공합니다.!!!

'기타 공부' 카테고리의 다른 글
| [Hugging Face] 허깅페이스 토큰발급받기 (0) | 2026.04.20 |
|---|---|
| [BitNet] i2_s 빌드 :: BitNet i2_s 모델, Termux에서 정상 구동까지의 실전 빌드 기록 (0) | 2026.03.22 |
| [Remix IDE] Remix와 Git 연동하기 / Remix에 git 리파지토리 올리기 (0) | 2022.12.07 |
| Open JDK 설치 / OperatingSystemMXBean 인터페이스 (0) | 2022.11.16 |
| 자바 프로젝트를 웹 프로젝트로 변환/컨버팅 하는법 (0) | 2022.11.14 |
댓글