g++ -c func1.c
g++ -c func2.c
ar rcs libmylibrary.a file1.o file2.o
g++ main.c -L. -lmylibrary -o myprogram
-L [path]
: 해당 path 의 .so, .a
파일을 라이브러리로 사용.-l[라이브러리 이름]
: 해당 이름의 파일을 라이브러리로 사용. 실제 라이브러리 파일 이름은 lib이름.so, lib이름.a
형태를 가짐.// mylibrarry.cpp
#include "mylibrary.h"
// 간단한 함수 구현
extern "C" {
int add(int a, int b) {
return a + b;
}
}
$g++ -shared -o libmylibrary.so mylibrary.cpp
// main.cpp
#include <iostream>
#include "mylibrary.h"
int main() {
int result = add(3, 4);
std::cout << "3 + 4 = " << result << std::endl;
return 0;
}
$ g++ -o main main.cpp -L. -lmylibrary
LD_LIBRARY_PATH
를 찾아서 활용)rpath
라고 부르는 "실행 시 라이브러리를 찾을 경로 정보" 를 컴파일 시점에 넣어 줄 수 있음. ex: gcc -Wl, -rpath /usr/local/lib hello.c
LD_LIBRARY_PATH
환경 변수/etc/ld.so.conf
파일에 설정되어 있음)/lib
/usr/lib
ldd /usr/bin/vim
/lib, /lib64
: cp
,mv
와 같은 시스템 기본 명령어/usr/lib, /usr/lib64
: 응용 프로그램 관련 라이브러리 출처 :
https://bradbury.tistory.com/224
https://www.lesstif.com/software-architect/shared-library-linker-loader-12943542.html
출처 :
https://m.blog.naver.com/njh0602/221065617097
https://stackoverflow.com/questions/12671383/benefits-of-header-only-libraries
https://en.wikipedia.org/wiki/Header-only
# 정적 라이브러리 생성
add_library(my_static_lib STATIC ${SOURCE_FILES})
mylib/
├── include/
│ └── mylib/
│ └── mylib.h
├── lib/
│ └── libmylib.a
└── CMakeLists.txt
# 프로젝트 이름과 최소 CMake 버전을 설정합니다.
cmake_minimum_required(VERSION 3.10)
project(MyApp)
# include 디렉토리를 설정합니다.
include_directories(${CMAKE_SOURCE_DIR}/mylib/include)
# 라이브러리 디렉토리를 설정합니다.
link_directories(${CMAKE_SOURCE_DIR}/mylib/lib)
# 실행 파일을 만듭니다.
add_executable(MyApp main.cpp)
# 라이브러리를 링크합니다.
target_link_libraries(MyApp mylib)
# 동적 라이브러리 생성
add_library(my_dynamic_lib SHARED ${SOURCE_FILES})
/path/to/library_root/
├── include/
│ ├── mylib.h
│ └── mylib_utils.h
├── lib/
│ ├── libmylib.so # Unix-like systems (e.g., Linux)
│ ├── libmylib.dylib # macOS
│ └── mylib.dll # Windows
├── bin/ # Optional, for executables and DLLs on Windows
│ └── mylib.dll # Sometimes DLLs are placed in the bin directory on Windows
└── CMake/
└── MyLibConfig.cmake # Optional, for CMake package configuration
cmake_minimum_required(VERSION 3.10)
project(MyApp)
# include 디렉토리 지정
include_directories(/path/to/library_root/include)
# 라이브러리 디렉토리 지정
link_directories(/path/to/library_root/lib)
# main.c 컴파일하여 실행 파일 생성
add_executable(MyApp main.c)
# 필요한 라이브러리를 링크
target_link_libraries(MyApp mylib)
find_package()
사용하는 경우MyLibConfig.cmake
: CMake 를 사용하여 패키지를 찾고 설정하기 위한 구성 파일. 라이브러리 위치, 필요 헤더 파일 경로, 링크해야 할 라이브러리 등 을 지정해서 다른 프로젝트가 쉽게 라이브러리를 사용 할 수 있도록 함.cmake_minimum_required(VERSION 3.10)
project(MyApp)
# 패키지 찾기
find_package(MyLib REQUIRED PATHS /path/to/library_root/CMake)
# include 디렉토리 및 라이브러리 디렉토리 자동 설정
include_directories(${MyLib_INCLUDE_DIRS})
link_directories(${MyLib_LIBRARY_DIRS})
# main.c 컴파일하여 실행 파일 생성
add_executable(MyApp main.c)
# 필요한 라이브러리를 링크
target_link_libraries(MyApp ${MyLib_LIBRARIES})