当前位置: 首页 > news >正文

c++程序编译静态和动态

怎么查看程序是否有需要动态库

ldd查看运行时依赖的动态库,而ldd存在于msys64.

判断程序是否需要动态编译和静态编译需要看他需不需要动态库。

MinGW

1、静态编译就是程序把静态库弄进exe程序了(总的来说就是exe需不需要后缀a文件)

实施操作:

mylib.cpp

#include "mylib.h" #include <iostream> void sayHello() { std::cout << "Hello from my custom libraryko!" << std::endl; } int add(int a, int b) { return a + b+1; }

mylib.h

#ifndef MYLIB_H #define MYLIB_H void sayHello(); int add(int a, int b); #endif

main.cpp

#include <iostream> #include "mylib.h" int main() { std::cout << "Hello, static compilation!" << std::endl; sayHello(); std::cout << "5 + 3 = " << add(5, 3) << std::endl; return 0; }

执行操作终端命令

将代码生成mylib.o,可以省去-o mylib.o。

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

再将mylib.o生成libmylib.a文件

ar rcs libmylib.a mylib.o

详解-lmylib,其实就是-lxxxx 等于 libxxx.a

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

上面的命令也可以

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

替换成

g++ -static main.cpp -L. -lmylib -o main_with_lib.exe

生成main_with_lib.exe程序后,直接运行

.\main_with_lib.exe

如果需要去除依赖编译器的dll动态库依赖,需要加上

g++ main.cpp -L. -lmylib -static-libgcc -static-libstdc++ -o main_with_lib.exe

2、动态编译就是程序没有把动态库弄进exe程序里(总的来说就是exe需不需要后缀dll文件)

实施操作:

依旧原上述代码

main.cpp、mylib.h、mylib.cpp

执行操作终端命令

生成mylib.dll、libmylib.a。

g++ -shared -o mylib.dll mylib.cpp -Wl,--out-implib,libmylib.a

生成main_with_lib.exe程序。

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

执行程序。

.\main_with_lib.exe

介绍终端命令

ldd

模糊查询,不区分大小写模糊搜索

ldd winutils.exe | findstr /i msvcr

未尝试

3、未尝试篇msvc编译器:

将main.cpp、mylib.h、mylib.cpp代码修改

main.cpp

// mylib.cpp #define MYLIB_EXPORTS #include "mylib.h" #include <iostream> void sayHello() { std::cout << "Hello from DLL!" << std::endl; } int add(int a, int b) { return a + b; }

mylib.h

// mylib.h #pragma once #ifdef MYLIB_EXPORTS #define MYLIB_API __declspec(dllexport) #else #define MYLIB_API __declspec(dllimport) #endif extern "C" { MYLIB_API void sayHello(); MYLIB_API int add(int a, int b); }

mylib.cpp

#include "mylib.h" int main() { sayHello(); int result = add(5, 3); return 0; }

MSVC 写法

生成静态库

cl mylib.cpp mylib.lib

或者

cl main.cpp /link mylib.lib

动态库

生成mylib.dll、mylib.lib

cl /LD mylib.cpp

关注 码问狙击所 --- 微信公众号

http://www.jsqmd.com/news/532627/

相关文章:

  • 从空白页到商业战略:商业专业人士与初学者使用 Visual Paradigm AI 模型画布工具的完整指南
  • 分析2026年天津镀锌带钢服务厂商,口碑好的有哪些 - 工业品牌热点
  • Windows和Linux信号处理差异全解析:你的Python代码真的跨平台吗?
  • 干货合集:高效论文写作全流程AI论文软件推荐(2026 最新)
  • AI论文生成助手哪个好?实测5款AI论文生成工具亲测,低AIGC率实现方法! - 掌桥科研-AI论文写作
  • Ubuntu 22.04下FreeSWITCH编译安装避坑指南:从依赖处理到服务配置
  • Realistic Vision V5.1 虚拟摄影棚:STM32项目UI界面概念图快速生成
  • ChatGPT 推出文件库功能,重塑用户文件管理体验
  • 2026年天津直角方管供应企业,口碑好的怎么选 - 工业设备
  • 手把手教你用iPhone模拟弱网环境:保姆级配置教程(含参数详解)
  • 如何为每个Android应用单独设置语言:Language Selector完整使用指南
  • 分析天津宏泰盛业科技幕墙精制钢,好用的原因有哪些? - 工业品网
  • 别再只会用普通FFT了!手把手教你用MATLAB实现频谱局部‘高清放大’(附完整代码与避坑点)
  • 零基础也能掌握的InvenTree库存管理高效管理实战指南
  • 基于电工杯数据的RNN网络电力负荷预测:Matlab完整代码实现与可视化分析
  • 深度实战指南:如何构建高效的富途量化交易系统
  • 都别卷OpenClaw[特殊字符]龙虾了!我帮老板写个Skill,赚了3万元
  • s2-pro语音合成可访问性:为视障用户提供无障碍语音导航方案
  • CAPL数学函数实战:5个高频使用场景与避坑指南(附完整代码)
  • 四川企业如何选对AI搜索优化公司?2026年避坑指南来了 - 2026年企业推荐榜
  • Jimeng LoRA在AI智能体开发中的应用:技能与风格的协同优化
  • 5分钟快速上手LizzieYzy:免费围棋AI分析助手的终极指南
  • VISIO导出PDF到Latex的终极指南:彻底解决白色边框和黑色线框问题
  • 计算机毕业设计springboot基于的水族馆销售与经营管理系统 基于SpringBoot的水生生物宠物商城与运营服务平台 SpringBoot框架下的观赏鱼电商与门店综合管理系统
  • 医疗器械出海必看:5分钟搞定FDA分类查询(附中英文对照表)
  • 2026实验室建设全周期服务商推荐:重庆迈锐斯,P2/P3/GLP/PCR实验室建设全场景覆盖 - 品牌推荐官
  • 2026年玻璃钢通风管道厂家推荐:河北和畅环保设备有限公司,有机/圆形/除臭风管全系供应 - 品牌推荐官
  • Claude Code自动模式:编码安全与效率的新平衡
  • CANoe之CAPL进阶实战_信号事件与回调函数深度解析
  • 从GUI-GUIDER到产品落地:3个优化lvgl界面性能的实用方法