创建动态库需分离接口与实现,Windows用.dll、Linux/macOS用.so/.dylib;关键步骤包括:一、头文件中用宏统一声明导出符号(Windows需__declspec(dllexport/import),Linux/macOS推荐__attribute__((visibility("default")))并加extern "C"防名字修饰);二、实现代码后编译为目标文件(Linux/macOS须加-fPIC);三、链接生成动态库(Windows用link /DLL,Linux用g++ -shared,macOS用clang++ -dynamiclib);四、通过链接或运行时加载使用。

创建动态库的关键是分离接口与实现,用编译器导出符号,并按平台规范链接生成二进制文件。Windows 用 .dll,Linux/macOS 用 .so(或 .dylib),但核心流程相似。
Windows DLL 需显式标记哪些函数/类对外可见;Linux 默认全局符号都可被链接,但建议加 __attribute__((visibility("default"))) 显式控制。
常见做法是用宏统一处理:
MYLIB_EXPORT 宏,展开为 __declspec(dllexport)(编译时)或 __declspec(dllimport)(使用时)__attribute__((visibility("default"))),未标注的默认隐藏(推荐)示例头文件 mylib.h:
立即学习“C++免费学习笔记(深入)”;
#ifndef MYLIB_H #define MYLIB_H <h1>ifdef _WIN32</h1><h1>ifdef MYLIB_BUILD</h1><pre class='brush:php;toolbar:false;'>#define MYLIB_API __declspec(dllexport)
#define MYLIB_API __declspec(dllimport)
extern "C" { MYLIB_API int add(int a, int b); MYLIB_API int multiply(int a, int b); }
注意:C++ 函数名会因编译器而修饰(name mangling),加 extern "C" 可保持 C 风格符号名,方便跨语言调用或避免链接错误。
写好 mylib.cpp,实现头文件中声明的函数:
#include "mylib.h"
<p>int add(int a, int b) { return a + b; }
int multiply(int a, int b) { return a * b; }分别编译(不链接):
图酷AI
下载即用!可以免费使用的AI图像处理工具,致力于为用户提供最先进的AI图像处理技术,让图像编辑变得简单高效。
106
查看详情
cl /c /EHsc /DMYLIB_BUILD mylib.cpp → 生成 mylib.obj
g++ -fPIC -c -DMYLIB_BUILD -o mylib.o mylib.cpp
clang++ -fPIC -c -DMYLIB_BUILD -o mylib.o mylib.cpp
关键点:-fPIC(Position Independent Code)在 Linux/macOS 是必须的;Windows DLL 默认支持重定位,无需额外标志。
用目标文件链接出最终动态库:
link /DLL /OUT:mylib.dll mylib.obj
g++ -shared -o libmylib.so mylib.o
clang++ -dynamiclib -o libmylib.dylib mylib.o
Linux 下也可加 -Wl,-soname,libmylib.so.1 设置 soname,便于版本管理;macOS 推荐加 -install_name @rpath/libmylib.dylib 方便运行时查找。
写一个测试程序 main.cpp:
#include <iostream>
#include "mylib.h"
int main() {
std::cout << add(3, 5) << "\n"; // 输出 8
std::cout << multiply(4, 6) << "\n"; // 输出 24
}编译并运行:
cl main.cpp /link mylib.lib(需先用 lib 工具从 DLL 生成 .lib 导入库),然后把 mylib.dll 放到 exe 同目录或系统 PATH 中g++ main.cpp -L. -lmylib -o main && LD_LIBRARY_PATH=. ./main
clang++ main.cpp -L. -lmylib -o main && DYLD_LIBRARY_PATH=. ./main
如果提示找不到库,检查路径、权限(Linux/macOS)、是否遗漏 -fPIC 或导出宏定义。
基本上就这些。核心是:头文件控制可见性、源码加导出标记、编译加位置无关选项、链接用共享模式。不复杂但容易忽略细节,比如 Windows 的 dllimport 和 Linux 的 -fPIC。
以上就是C++如何创建一个动态库(.dll/.so)?(详细步骤)的详细内容,更多请关注其它相关文章!
# 客户端
# 体育网站建设美丽图片
# 海口网站建设订制
# 太原网站建设详细方案
# 上海口碑好的营销推广
# 英山seo服务好
# seo全网营销推广广告
# 成名电影网站建设
# 谷歌seo都做哪些工作
# 河北广告推广网站
# 长葛关键词排名优化软件
# 相关文章
# 也可
# 找不到
# 网络编程
# linux
# 如何实现
# 图像处理
# 创建一个
# 图酷
# 头文件
# red
# lsp
# cos
# win
# macos
# c++
# ai
# mac
# windows
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
火狐浏览器无法自动更新怎么办 手动更新火狐浏览器到最新版本【解决】
《偃武》甘宁技能详解
SQL聚合查询、联接与筛选:GROUP BY 子句的正确使用与常见陷阱
C#中的Record类型有什么优势?C# 9新特性Record与Class的用法区别
稻壳阅读器官方直达网址链接 稻壳阅读器文档阅读平台主页资源入口
Python中安全地将环境变量转换为整数的类型注解指南
漫蛙漫画官方网站使用_漫蛙manwa网页版在线入口教程
如何自定义苹果手机铃声
B站怎么快速升级 B站用户等级提升攻略【详解】
使用document.execCommand实现Web文本编辑器加粗/取消加粗
Lar*el 关联查询:同时筛选父表与子表数据的高效策略
邦丰播放器频道搜索设置
C++ bind函数使用教程_C++参数绑定与函数适配器的应用
如何在mysql中比较InnoDB和MyISAM区别
电脑从睡眠中被自动唤醒怎么办_Windows唤醒源事件查看与禁用【解决】
Lar*el Eloquent中通过Join查询关联数据表:解决多行子查询问题
Win11如何分屏操作_Win11多窗口分屏技巧
C++如何将字符串转换为大写或小写_C++ transform函数的使用技巧
三星A55应用闪退排查步骤_Samsung A55稳定性优化技巧
猫眼电影app如何设置电影上映提醒_猫眼电影上映提醒设置教程
毒蘑菇VOLUMESHADER_BM官网首页登录入口 毒蘑菇VOLUMESHADER_BM官网首页登录入口说明
蜻蜓FM如何设置移动流量播放
深入理解随机递归函数的确定性:内部节点、叶节点与时间复杂度分析
苹果电脑如何快速截图并编辑 苹果电脑截屏标注快捷操作
iPhone12是否要更新ios16
PHP页面重载后变量状态保持:实现用户档案连续浏览的教程
如何解决Casbin日志与应用日志不统一的问题,使用casbin/psr3-bridge实现无缝集成
Flexbox布局:实现粘性导航与底部页脚的完美结合
苹果手机手电筒无法开启
实时数据流中高效查找最小值与最大值
MacBook Pro词典使用指南
虫虫助手如何更新游戏
b站如何管理订阅_b站订阅标签分类管理
淘口令快速解析技巧
《伊瑟》凶影追缉库卢鲁boss攻略
126邮箱申请入口官网_126邮箱注册免费登录2025
外媒评《燕云十六声》DIY载具新玩法:很像《塞尔达传说王国之泪》!
谷歌浏览器官网地址整理_谷歌浏览器新版直连2026稳定访问
百度竞价WAP显示PC链接问题
《土豆雅思》修改密码方法
sublime如何自定义文件类型图标_AFileIcon插件的主题切换与个性化配置
Bootstrap 5导航栏折叠功能失效:数据属性迁移指南
哔哩哔哩在线观看入口 B站官网免费进入
三角洲行动2025年9月10日摩斯密码分享
悟空浏览器如何恢复关闭的标签页 悟空浏览器撤销关闭网页快捷键设置
NumPy 高性能技巧:基于多列条件查找最近邻行索引的向量化实现
汽水音乐在线听歌网页版 汽水音乐在线听歌网页版入口
热血江湖归来医师加点攻略
猫眼app抢票快还是小程序快
解决Windows上Composer PATH变量冲突导致的命令无法识别问题
2025-12-17
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。