在Linux中,使用C++实现动态链接库(DLL)通常是通过创建共享对象(Shared Object,简称.so文件)来实现的。以下是创建和使用动态链接库的基本步骤:
// mylib.h
#ifndef MYLIB_H
#define MYLIB_H
#ifdef __cplusplus
extern "C" {
#endif
void myFunction();
#ifdef __cplusplus
}
#endif
#endif // MYLIB_H
// mylib.cpp
#include "mylib.h"
#include <iostream>
void myFunction() {
std::cout << "Hello from myFunction!" << std::endl;
}
g++ -fPIC -c mylib.cpp -o mylib.o
g++ -shared -o libmylib.so mylib.o
-fPIC
选项告诉编译器生成位置无关代码(Position Independent Code),这是创建共享库所必需的。-shared
选项告诉g++创建一个共享库。
// main.cpp
#include "mylib.h"
int main() {
myFunction();
return 0;
}
编译主程序时,需要指定共享库的位置,可以使用-L
选项指定库的路径,使用-l
选项指定库的名字(不需要前缀lib
和后缀.so
)。
g++ main.cpp -L/path/to/library -lmylib -o myprogram
LD_LIBRARY_PATH
环境变量来实现。export LD_LIBRARY_PATH=/path/to/library:$LD_LIBRARY_PATH
./myprogram
或者,你可以将库文件复制到系统默认的库路径中,例如/usr/lib
或/usr/local/lib
。
注意:在Linux中,动态链接库的标准文件扩展名是.so
,而不是Windows中的.dll
。此外,为了避免名称冲突,通常会在库的名字前加上lib
前缀,例如libmylib.so
。在使用时,链接器会自动添加这个前缀和.so
后缀。