在Linux上部署C++程序并使用动态链接库(Dynamic Link Library,简称DLL)的过程分为几个步骤。以下是一个详细的指南:
首先,你需要创建一个动态链接库。假设你要创建一个名为 libmylib.so
的库,其中包含一个简单的函数 add
。
创建一个名为 mylib.cpp
的文件,内容如下:
#include <iostream>
extern "C" {
int add(int a, int b) {
return a + b;
}
}
注意使用 extern "C"
来防止C++的名称修饰(name mangling)。
使用 g++
编译器编译这个文件,并生成动态链接库:
g++ -shared -fPIC -o libmylib.so mylib.cpp
创建一个名为 main.cpp
的文件,内容如下:
#include <iostream>
#include <dlfcn.h>
int main() {
void* handle = dlopen("libmylib.so", RTLD_NOW);
if (!handle) {
std::cerr << "Cannot open library: " << dlerror() << std::endl;
return 1;
}
int (*add)(int, int) = (int (*)(int, int))dlsym(handle, "_Z3addi");
if (!add) {
std::cerr << "Cannot find symbol: " << dlerror() << std::endl;
dlclose(handle);
return 1;
}
int result = add(3, 4);
std::cout << "Result: " << result << std::endl;
dlclose(handle);
return 0;
}
使用 g++
编译器编译主程序,并链接到动态链接库:
g++ -o main main.cpp -L. -lmylib
确保动态链接库在系统的库路径中,然后运行主程序:
./main
你应该会看到输出 Result: 7
。
如果你将动态链接库放在非标准路径中,可以使用 LD_LIBRARY_PATH
环境变量来指定库路径:
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
./main
通过以上步骤,你成功地在Linux上部署了一个C++程序,并使用动态链接库。关键步骤包括创建动态链接库、编写主程序、编译主程序并链接到动态链接库,最后运行程序。