在 Ubuntu 上“连接 C++ 库”通常包含两层含义之一:
下面我分别说明常见做法,并给出示例。
sudo apt update
sudo apt install libboost-dev
// main.cpp
#include <boost/algorithm/string.hpp>
#include <iostream>
#include <string>
int main() {
std::string s = "hello world";
boost::to_upper(s);
std::cout << s << std::endl;
return 0;
}
g++ main.cpp -o main -lboost_system
说明:
-l 后面是库名(去掉 lib 和 .so)/usr/include/usr/lib 或 /usr/lib/x86_64-linux-gnusudo apt install libopencv-dev
g++ main.cpp -o main `pkg-config --cflags --libs opencv4`
或使用 CMake(推荐):
find_package(OpenCV REQUIRED)
target_link_libraries(app ${OpenCV_LIBS})
// mylib.h
#pragma once
void hello();
// mylib.cpp
#include <iostream>
void hello() {
std::cout << "Hello from lib" << std::endl;
}
g++ -c mylib.cpp -o mylib.o
ar rcs libmylib.a mylib.o
// main.cpp
#include "mylib.h"
int main() {
hello();
}
g++ main.cpp -L. -lmylib -o app
-L.:库路径-lmylib:链接 libmylib.ag++ -fPIC -shared mylib.cpp -o libmylib.so
使用:
g++ main.cpp -L. -lmylib -o app
export LD_LIBRARY_PATH=.
./app
cmake_minimum_required(VERSION 3.10)
project(demo)
add_library(mylib mylib.cpp)
add_executable(app main.cpp)
target_link_libraries(app mylib)
cannot find -lxxx
解决:
-L/path/to/liberror while loading shared libraries
解决:
export LD_LIBRARY_PATH=/path/to/lib:$LD_LIBRARY_PATH
或:
sudo ldconfig
如果你能具体说明:
我可以给你更精确的命令示例。