在 Ubuntu 下用 C++ 连接(链接)库,通常分为系统库、第三方库、自己写的库几种情况。下面按常见场景给你一个完整说明。
-c 生成 .o.o 和库文件连成可执行文件.a.sopthread 和 math 库// main.cpp
#include <iostream>
#include <pthread.h>
#include <cmath>
int main() {
std::cout << sqrt(16) << std::endl;
return 0;
}
编译:
g++ main.cpp -o main -lpthread -lm
说明:
-lxxx 表示链接 libxxx.so-lm → libm.so-lpthread → libpthread.sosudo apt update
sudo apt install libopencv-dev
g++ main.cpp -o main `pkg-config --cflags --libs opencv4`
或显式写:
g++ main.cpp -o main -lopencv_core -lopencv_imgproc -lopencv_highgui
// mylib.cpp
#include <iostream>
void hello() {
std::cout << "Hello from lib" << std::endl;
}
// mylib.h
void hello();
g++ -c mylib.cpp -o mylib.o
ar rcs libmylib.a mylib.o
g++ main.cpp -L. -lmylib -o main
g++ -fPIC -shared mylib.cpp -o libmylib.so
使用:
g++ main.cpp -L. -lmylib -o main
运行时需要库路径:
export LD_LIBRARY_PATH=.
./main
cmake_minimum_required(VERSION 3.10)
project(demo)
find_package(OpenCV REQUIRED)
add_executable(demo main.cpp)
target_link_libraries(demo ${OpenCV_LIBS})
构建:
mkdir build && cd build
cmake ..
make
undefined referencecannot find -lxxxsudo find / -name "libxxx*"
然后:
-L/path/to/lib
.soldd ./main
sudo cp libxxx.so /usr/lib/
sudo ldconfig
Ubuntu 下 C++ 连接库 = 编译时
-I头文件路径 + 链接时-L库路径 +-l库名
如果你有具体库名(如 Boost / Protobuf / MySQL)或报错信息,可以直接发出来,我可以给你更精确的命令。