温馨提示×

ubuntu c++如何调用库文件

小樊
37
2026-09-17 13:37:54
栏目: 编程语言

在 Ubuntu 下用 C++ 调用“库文件”,一般分为两种情况:静态库(.a)动态库(.so)。下面从「如何生成库」到「如何调用库」给你一个完整、实用的说明。


一、准备示例源代码

1. 头文件 mylib.h

#ifndef MYLIB_H
#define MYLIB_H

void hello();
int add(int a, int b);

#endif

2. 源文件 mylib.cpp

#include <iostream>
#include "mylib.h"

void hello() {
    std::cout << "Hello from mylib!" << std::endl;
}

int add(int a, int b) {
    return a + b;
}

3. 主程序 main.cpp

#include "mylib.h"

int main() {
    hello();
    std::cout << add(3, 4) << std::endl;
    return 0;
}

二、生成静态库(.a)并调用

1. 编译为目标文件

g++ -c mylib.cpp -o mylib.o

2. 生成静态库

ar rcs libmylib.a mylib.o

3. 使用静态库编译主程序

g++ main.cpp -L. -lmylib -o main

说明:

  • -L.:在当前目录找库
  • -lmylib:链接 libmylib.a

4. 运行

./main

三、生成动态库(.so)并调用

1. 编译为动态库

g++ -fPIC -shared mylib.cpp -o libmylib.so

2. 编译主程序

g++ main.cpp -L. -lmylib -o main

3. 运行(重要)

Ubuntu 默认不会在当前目录找 .so,需要指定路径:

export LD_LIBRARY_PATH=.
./main

或者:

LD_LIBRARY_PATH=. ./main

四、系统级安装库(推荐)

安装库文件

sudo cp libmylib.so /usr/local/lib/
sudo cp mylib.h /usr/local/include/
sudo ldconfig

编译时直接调用

g++ main.cpp -lmylib -o main

五、查看库信息(常用命令)

# 查看动态库依赖
ldd main

# 查看库中符号
nm libmylib.a
nm -D libmylib.so

六、常见问题

1. cannot find -lmylib

  • 库名写错(必须是 libxxx.a / libxxx.so
  • 没加 -L路径

2. error while loading shared libraries

  • 没设置 LD_LIBRARY_PATH
  • 没执行 sudo ldconfig

3. C++ 名字粉碎(name mangling)

如果库是 C 写的,C++ 调用要加:

extern "C" {
#include "mylib.h"
}

如果你有具体库名(如 OpenCV、Boost、第三方 SDK)或报错信息,可以直接发出来,我可以针对你的情况给命令。

0