- CMakeLists.txt
# cmake至少3.16以上
cmake_minimum_required(VERSION 3.16)
# 工程名叫做hello
project(hello)
# C++14
set(CMAKE_CXX_STANDARD 14)
# 生成动态库
add_library(hello SHARED ${PROJECT_SOURCE_DIR}/hello.cpp)
- hello.h
#ifndef HELLO_H
#define HELLO_H
void hello();
#endif
- hello.cpp
#include "hello.h"
#include <iostream>
void hello() {
std::cout<<"hello world"<<std::endl;
}
一个源文件到可执行文件,会经过四步
- 预编译
- 编译
- 汇编
- 链接
g++ -c -fPIC hello.cpp hello.h
g++ -shared -fPIC -o libhello.so hello.o
- main.cpp
#include "hello.h"
int main() {
hello();
}
- 命令行使用libhello.so
g++ -o main.out main.cpp -L. -lhello
# 下面这个格式也可以
g++ -o main.out main.cpp -L . -l hello
- 链接库的默认path有可能需要临时修改
# 如果报错,可以修改默认动态链接库位置/home/ubuntu/cmake_test改成你自己的pwd
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/ubuntu/lecture
export LD_LIBRARY_PATH
或者
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/ubuntu/lecture