答案:C++中动态库在Windows下用DLL、Linux下用SO实现,需分别使用__declspec(dllexport)和-fPIC/-shared编译,导出函数建议用extern "C"避免命名修饰,调用时需正确链接导入库并配置路径。

在C++中创建和使用动态链接库(Windows下为DLL,Linux下为SO)是模块化开发的重要手段。它能让代码复用、更新更灵活,同时减少可执行文件体积。下面分别介绍在Windows和Linux环境下如何创建与调用C++动态库。
1. 创建DLL项目
使用Visual Studio或命令行工具均可。以Visual Studio为例:
2. 编写导出函数
立即学习“C++免费学习笔记(深入)”;
在mylib.h中声明要导出的函数,使用__declspec(dllexport)标记:
#ifdef MYLIB_EXPORTS #define MYLIB_API __declspec(dllexport) #else #define MYLIB_API __declspec(dllimport) #endif extern "C" MYLIB_API int add(int a, int b);
在mylib.cpp中实现函数:
#include "mylib.h"
int add(int a, int b) {
    return a + b;
}
注意:extern "C"防止C++命名修饰,便于C/C++调用。
3. 编译生成DLL
4. 调用DLL
新建一个可执行项目,包含mylib.h,链接mylib.lib,并将mylib.dll放到输出目录。
调用代码示例:
#include "mylib.h"
#include <iostream>
int main() {
    std::cout << "5 + 3 = " << add(5, 3) << std::endl;
    return 0;
}
在项目属性中添加附加依赖库:mylib.lib,并设置包含目录。
1. 编写源码
创建mylib.h和mylib.cpp,内容与上面类似,无需__declspec:
#ifndef MYLIB_H
#define MYLIB_H
#ifdef __cplusplus
extern "C" {
#endif
int add(int a, int b);
#ifdef __cplusplus
}
#endif
#endif
2. 编译生成SO
使用g++编译:
g++ -fPIC -shared -o libmylib.so mylib.cpp
-fPIC:生成位置无关代码。-shared:生成共享库。3. 调用SO
编写主程序main.cpp:
#include "mylib.h"
#include <iostream>
int main() {
    std::cout << "5 + 3 = " << add(5, 3) << std::endl;
    return 0;
}
编译并链接SO:
g++ main.cpp -L. -lmylib -o main
-L.:指定库搜索路径(当前目录)。-lmylib:链接libmylib.so。运行前需确保系统能找到SO文件:
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH ./main
若希望代码跨平台,可用宏处理差异:
#ifdef _WIN32 #define MYLIB_API __declspec(dllexport) #else #define MYLIB_API #endif
导出类时也类似,但要注意STL对象跨库传递可能引发问题,建议接口保持C风格或使用抽象基类。
基本上就这些。核心是定义清楚接口、正确编译生成动态库,并在调用端正确链接和部署。不复杂但容易忽略路径和导出符号的问题。
以上就是c++++怎么创建和使用动态链接库(DLL/SO)_c++动态库的创建、编译与调用方法的详细内容,更多请关注php中文网其它相关文章!
 
                        
                        c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
 
                Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号