eclipse cdt 编译动态库,供msvc调用 -- 2.构建C++动态库工程模板

Ubuntu(Linux)使用Eclipse搭建C/C++编译环境 <br /> <br />首先是安装Eclipse,方法有两种: <br />       第一种是通过Ubuntu自带的程序安装功能安装Eclipse,应用程序->Ubtuntu软件中心,搜Eclipse安装即可。<br />       第二种方法是用命令:应用程序->附件->终端<br />                                       然后输入(中间可能需要你输入密码):<br />                                       sudo 阅读详情

1. 新建 C/C++ Project >> shared library

之前配置了mingw-gcc 这里的 cross gcc 默认指向的就是 mingw path,若没有配置环境变量,也可以手动添加

 

2. 工程属性配置

C/C++ Build

 

 3. 头文件 条件编译

小生也是初学乍练,场景是这样的,因为使用mingw-gcc 编出的库,可以直接提供给qt 使用,但是vs上就是不能使用,加载后依然无法找到执行函数。

原因是导出函数机制的问题。QT 中报错如:

  error: undefined reference to `_imp__glClearColor@16'

参见代码:

/* on MS environments, the inline keyword is available in C++ only */
#if !defined(__cplusplus)
#define inline __inline
#endif

/* on windows with mingw32 */
#if defined(__GNUC__)
#  define PRE_CDECL
#  define POST_CDECL __attribute__((cdecl))
#  define PRE_STDCALL
#  define POST_STDCALL __attribute__((stdcall))
#  define PRE_FASTCALL
#  define POST_FASTCALL __attribute__((fastcall))
#else
#  define PRE_CDECL __cdecl
#  define POST_CDECL
#  define PRE_STDCALL __stdcall
#  define POST_STDCALL
#  define PRE_FASTCALL __fastcall
#  define POST_FASTCALL
#endif /* __GNUC__ */

函数声明:

#if defined(LIBUSP_BPM22_EXPORTS)
#define LIBUSP_BPM22_API __declspec(dllexport)
#else
#define LIBUSP_BPM22_API __declspec(dllimport)
#endif

#ifdef __cplusplus
extern "C"
{
#endif

    LIBUSP_BPM22_API int PRE_CDECL dll_test(int aa) POST_CDECL;

#ifdef __cplusplus
}
#endif
#endif /* LIBUSP_BPM22_H_ */

4. 生成对应导入库  dll lib

-- 使用 pexports 导出 def 文件

 

 

导出 C++ 文件中的函数,必须将修饰名放到 .def 文件中,或者通过使用外部“C”定义具有标准 C 链接的导出函数。如果需要将修饰名放到 .def 文件中,则可以通过使用 DUMPBIN 工具或 /MAP 链接器选项来获取修饰名。请注意,编译器产生的修饰名是编译器特定的。如果将 Visual C++ 编译器产生的修饰名放到 .def 文件中,则链接到 DLL 的应用程序必须也是用相同版本的 Visual C++ 生成的,这样调用应用程序中的修饰名才能与 DLL 的 .def 文件中的导出名相匹配。
当生成 DLL 时,链接器使用 .def 文件创建导出 (.exp) 文件和导入库 (.lib) 文件。然后,链接器使用导出文件生成 DLL 文件。隐式链接到 DLL 的可执行文件在生成时链接到导入库。在VC++中,如果生成DLL可以不使用.def文件。你只需要在VC++的函数定义前要加 __declspec(dllexport)修饰就可以了。但是使用__declspec(dllexport)和使用.def文件是有区别的。如果你的 DLL是提供给VC++用户使用的,你只需要把编译DLL时产生的.lib提供给用户,它可以很轻松地调用你的DLL。但是如果你的DLL是供VB、 PB、Delphi用户使用的,那么会产生一个小麻烦。因为VC++对于__declspec(dllexport)声明的函数会进行名称转换,如下面的函数:
   __declspec(dllexport) int __stdcall IsWinNT()
会转换为IsWinNT@0,这样你在VB中必须这样声明:
   Declare Function IsWinNT Lib "my.dll" Alias "IsWinNT@0" () As Long
@的后面的数由于参数类型不同而可能不同。这显然不太方便。所以如果要想避免这种转换,就要使用.def文件方式。
EXPORTS后面的数可以不给,系统会自动分配一个数。对于VB、PB、Delphi用户,通常使用按名称进行调用的方式,这个数关系不大,但是对于使用.lib链接的VC程序来说,不是按名称进行调用,而是按照这个数进行调用的,所以最好给出。

== == == ==

针对最简单的Dll,Win32 Application的方式稍有不同,定义导出函数接口的方法有两种:
1.使用__declspce宏
extern "C" __declspec(dllexport) void display(void);
extern "C" __declspec(dllexport) void test(int aa);

这里的extern "C" 表示我们要按照C语言的方式编译该函数,防止在C++工程中编译出现函数名错误,因为C中没有重载而C++中允许重载,所以C++中函数编译后会出现display@1的形式;让编译器以C语言的编译方式编译可以保证C可以调用C++的动态链接库。__declspec(dllexport)表示下来的函数是dll的导出函数接口。没有导出的接口是不可使用的,这里和静态lib库有所区别,静态lib库中的所有函数、宏定义等都是可以使用的。

2.使用def文件,该文件的功能类似于__declspec(dllexport)的功能。

 == == == ==

使用lib pexports 工具导出导入库:

1 pexports libusp_BPM22.dll > libusp_BPM22.def
2 lib.exe /machine:i386 /def:libusp_BPM22.def /out:libusp_bpm22.lib
pexports 是msys 提供的工具
lib 是vs 提供的工具

** 到此,已经得到dll 和对应的导入库 .lib 文件,可以提供给 vs 使用。

参见博文:

分析Linux和windows动态库 - 中土 - 博客园

GCC编译过程与动态链接库和静态链接库 - 三年一梦 - 博客园

Common Predefined Macros (The C Preprocessor)

DLL中导出函数的两种方式(dllexport与.def文件)

C++编译全流程解析:从源码到可执行文件的完整指南 编译是将高级语言转换为机器可执行代码的核心过程,涉及预处理、编译、汇编和链接四个关键阶段。其原理在于通过词法分析、语法分析和语义分析构建抽象语法树,再经优化生成目标代码,最终由链接器合并为可执行文件。理解编译流程的技术价值在于提升代码构建效率、优化程序性能,并能有效解决常见的链接错误和符号重定义问题。在实际应用场景中,掌握GCC、Clang和MSVC等工具链的差异,以及构建系统如CMake的使用,对于开发跨平台应用和大型项目至关重要。本文聚焦于C++编译详解,通过解析预处理阶段的宏展开和头文件处理,以及链接 阅读详情

相关推荐

C++开发工具链全解析:从IDE到调试器,构建高效编程环境

在软件开发领域,工具链是连接代码与最终产品的核心桥梁,直接影响开发效率和软件质量。其原理在于通过一系列自动化工具,将源代码转化为可执行程序,并辅助开发者进行调试、测试与优化。对于C++这类复杂且高性能的语言,工具链的价值尤为突出,它不仅能提升编译速度、优化内存管理,还能通过静态分析预防潜在缺陷。在实际应用中,从集成开发环境(IDE)的选择到编译器的配置,再到调试工具的使用,每个环节都关乎项目的成败。本文聚焦于C++开发中的核心工具,深入探讨Visual Studio、VSCode等主流IDE的优劣,以及GC

weixin_34378969的博客 348

eclipse 下 c/c++编译.so库,使用.so库(linux)

首先需要安装好eclipse 的cdt编译的环境。配置好gcc 编译环境。lunix 一般情况下都会有gcc ,windows就需要装个cygwin。 一、建立一个动态连库(.so文件) 1、先在eclipse中创建一个共享库工程 File->New->Project->C Project,选择Shared Library,选择empty project 2、创建工程的源文件share

jackcoder的博客 8411

从郑莉C++课程到现代开发:掌握类与对象、智能指针与内存管理核心

面向对象编程(OOP)是软件工程的核心范式,其通过封装、继承和多态三大特性,将数据与操作绑定为对象,提升代码的模块化、可重用性和可维护性。在C++中,类的设计遵循RAII原则,通过构造函数、析构函数管理资源生命周期,而拷贝控制(三/五法则)确保对象行为的正确性。现代C++引入智能指针(如std::unique_ptr、std::shared_ptr),自动化内存管理,显著减少内存泄漏和悬空指针风险,提升工程可靠性。这些技术广泛应用于系统编程、游戏引擎、高频交易等领域,为学习数据结构(如八大排序算法)和算法(

weixin_34168880的博客 1030

使用eclipse编译生成so

本文是百度各路大神的文章,然后自己亲自实现之后,写下来的 留待后用,若有问题,请指正 1:新建一个项目,包名别带下划线     以免后面.c文件分不清: 2:然后新建一个调用类: public class HelloJni{ static{         System.loadLibrary("");;//暂时不写加载什么类   后面生成好后再填上去     }

qq_24179679的博客 3327

一站式Eclipse C++开发环境配置指南

Eclipse 是一个基于 Java 的开源集成开发环境(IDE),最初由 IBM 开发,现由 Eclipse 基金会维护。它通过插件机制实现了对多种编程语言的支持,其中 C++ 开发主要依赖于 CDT(C/C++ Development Tooling)插件。Eclipse CDT 提供了完整的 C++ 开发工具链集成,包括项目管理、代码编辑、构建系统、调试器(如 GDB)以及静态分析等功能。

weixin_42452483的博客 1157

Eclipse C++连接与操作MySQL数据库完整实践

Eclipse 是一个开源、跨平台的集成开发环境(IDE),广泛用于多种编程语言的开发,尤其在Java、C++等领域表现突出。对于C++开发者而言,Eclipse提供了良好的代码编辑、调试和项目管理功能。在开始搭建之前,需要根据操作系统(Windows/Linux/macOS)选择合适的Eclipse版本。以Windows平台为例,推荐下载版本,该版本已预装了C/C++开发工具包(CDT)。可以从官网下载对应系统的安装包。安装过程较为简单,解压后运行即可启动IDE。

weixin_42593549的博客 1293

eclipse中加载C/C++源文件生成对应的so文件(图文教程) 2020最新

准备工作: 确保eclipse正确配置了ndk开发环境; 第一步、新建一个安卓项目 第二步、添加一个ndk支持 第三步、引入jni支持 第四步、在jni文件夹下创建(.c、.h、Android.mk、Application.mk)等文件; 项目结构 .c文件:安卓调用的so文件里方法的具体实现; .h文件:.c文件里用到的方法(类似java里的接口定义)和结构体(类似java里的实体类)的定义; Android.mk文件:标注了SO文件生成相关的信息,例如生成路径、生成名称、引

wangkai13810651628的博客 798

使用eclipse直接生成so文件

使用eclipse直接生成so文件.使用eclipse直接生成so文件

eclipse找不到cdt_将Visual Studio C和C ++项目迁移到Eclipse CDT

Eclipse平台是一个开源工具,可以帮助您在单个开发环境中将项目从设计转移到测试阶段,而无需为每个阶段使用单独的工具。 Eclipse是为协助工具开发社区而开发的,它专注于工具的核心功能,而不是专注于IDE本身。 由于Eclipse的编程模型可以实现这一点,该模型支持称为插件的软件构件。 最初,Eclipse是从Java编程IDE开始的,因为这是一个小时的需求。 由于它的可扩展性,它被广...

cuxiong8996的博客 390

离线安装samba与配置(.tar方式安装)

个人记录

小道士写程序 7724

海康威视iVMS-4200在银河麒麟系统部署全攻略与疑难排解

在信创国产化进程中,软件兼容性是关键挑战之一。以安防监控领域广泛使用的海康威视iVMS-4200客户端为例,其从Windows环境迁移到银河麒麟等国产操作系统时,面临架构适配、依赖库匹配等核心兼容性问题。这涉及到跨平台软件部署的通用原理:不同CPU架构(如ARM的飞腾、x86的兆芯)和操作系统底层API的差异,要求软件必须进行针对性编译和优化。解决这类问题的技术价值在于保障专业软件在国产化环境中的稳定运行,是信创产业落地的重要环节。具体到应用场景,如在基于银河麒麟V10的安防监控项目中,通过获取对应架构的.

weixin_33423874的博客 1451

将 Visual Studio C 和 C++ 项目迁移到 Eclipse CDT

将 Microsoft VS 项目迁移到 Eclipse C/C++ Development Toolkit 的详尽指南 Windows® 上的大多数 C/C++ 项目都是使用 Microsoft® Visual Studio® 开发的,因此研究这些项目到 Eclipse 这种开放源码 IDE 的迁移是很有必要的。本文简明扼要地介绍了将 Microsoft Visual Studio C/C

Lyu-ming 栏目 2991

全网首发!Yolov8_obb旋转框训练、测试、推理手把手教学(DOTA1.0数据集map50已达80%)

其中,images/train和images/val放置原始图片文件,labels/train_original和labels/val_original分别放置原始的标签文件,labels/train和labels/val为空,然后运行步骤(3)的代码,运行结束转换后的标签会保存在labels/train和labels/val中,格式如下。(4)新建yolov8-obb.yaml,修改nc和scales,我使用的是yolov8n.(2)构建数据集,安装下面目录格式,其他test可为空,一定要对应。

小嘤熊的博客 2万+

将 Visual Studio C 和 C++ 项目迁移到 Eclipse CDT_C/C++

转载自:http://www.10086web.com/html/wangluobiancheng/C__/2010/0508/6863.html   Eclipse Platform 是一种开放源码工具,协助您在单独一个开发环境内将项目从设计阶段转到测试阶段,而无需为各阶段使用不同的工具。开发 Eclipse 的目的在于为工具开发社区提供帮助,使人们能集中精力处理工具的核心功能性,而不

客亦知夫水与月乎? 1544

lego-loam featureAssociation 源码注释(五)

上一次我们已经看完了特征提取,这次我们进入特征匹配的内容!!!systemInitedLM的初始值为false。

Joeybee的博客 889

Linux内核驱动模型--PCIe(PCI Express)驱动​​

本文系统介绍了Linux内核中PCIe驱动的设计与实现。首先从架构定位入手,指出PCIe驱动基于PCI子系统扩展支持高速、低功耗特性。核心数据结构struct pci_driver包含设备匹配表id_table、生命周期函数probe/remove等关键组件。文章详细解析了驱动与设备的绑定流程、资源管理机制,并重点阐述了MSI-X中断、电源管理、热插拔和多队列等高级特性实现方案。最后提供了lspci、dmesg等调试工具的使用方法,总结了PCIe驱动在支持高性能设备中的关键作用。全文通过架构设计、核心结构、

amy_mhd的博客 428

CMake与Eclipse集成详解:项目生成与调试环境配置

你是否还在为手动配置Eclipse项目而烦恼?频繁切换工具链、调整编译选项、同步代码变更,这些重复工作消耗大量开发时间。本文将系统讲解如何通过CMake实现Eclipse CDT项目的自动化生成与调试环境配置,让你5分钟内完成从源码到可调试程序的全流程。 读完本文你将掌握: - 使用CMake生成Eclipse CDT4项目文件的完整命令 - 多平台编译选项的自动化配置技巧 - 断点调试环境的无...

gitblog_00405的博客 1032

2020计算机专业保研夏令营面经:中科院计算所网数机试题目

计算所网络数据科学与技术重点实验室的第一阶段是机试。机试不限程序语言,要求提交源代码。

乔卿的博客 2957

DAVE3编译报错:依赖路径断链的系统化排查与修复指南

在嵌入式开发中,集成开发环境(IDE)的工程配置管理是确保项目可移植性和团队协作效率的关键。其核心原理在于IDE通过工程文件(如.cproject)管理编译器设置,包括头文件搜索路径(Include Paths)和预定义宏。当这些配置中包含了绝对路径或依赖于特定环境变量时,一旦开发环境发生迁移或变更,就会导致路径解析失败,引发“dependent '...\some_header.h' does not exist”这类编译错误。这种问题的技术价值在于,它深刻揭示了构建系统对路径管理的依赖,是理解嵌入式工具

weixin_30652897的博客 302

倾斜摄影与地面激光点云融合高精度建模研究

本文研究了倾斜摄影与地面激光点云融合精细化建模技术,并通过相应的源代码实现了建模过程。该方法将倾斜摄影和激光扫描相结合,能够获得高精度的三维建模结果,为相关领域的研究和应用提供了有力支持。近年来,倾斜摄影和激光扫描技术的快速发展为高精度三维建模提供了新的机遇和挑战。本文针对倾斜摄影与地面激光点云融合建模这一前沿领域展开研究,旨在通过相应的源代码实现精细化的建模过程。同时,使用激光扫描仪进行地面激光扫描,获取地面的点云数据。经过数据融合和精细化建模处理后,我们获得了高精度的三维建模结果。

LpmShell的博客 1246

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

IBM Eclipse 项目资源中心

developerWorks 中国 > Open source > Eclipse 项目资源中心Eclipse 技术文章、教程、下载和相关资源推荐从这开始下载和技术支持社区2007 年 4 月 4 号 更新  

Zfrong繁荣的IT技术、IT项目、解决方案专栏Blog-上海 1880

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

CLion与Visual Studio深度对比:现代C++开发效率实战解析

集成开发环境(IDE)是程序员的核心生产力工具,其设计理念直接影响编码、调试与项目管理的效率。现代IDE通过深度集成编译器、调试器和构建系统,实现了从代码编写到构建部署的自动化,显著降低了开发复杂度。在C++开发领域,构建系统(如CMake)的统一管理和跨平台支持能力已成为评估IDE技术价值的关键指标,它确保了项目在不同环境下的行为一致性,从根本上解决了环境配置难题。智能代码补全、安全重构和实时分析等高级功能,则进一步提升了代码质量与维护效率。这些特性在桌面应用、服务器后端及嵌入式系统等多元场景中尤为重要。

weixin_33749131的博客 341

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

用Eclipse CDT 配置C/C++ 编译环境

当Visual C++长了尾巴,当Borland C++ Builder臃肿不堪,当钱包空空,难道在Windows下再没有我们可以负担的起而又足够优秀的C++ IDE?当然不是。这个世界上还有一种东西叫开源。本文的目的就是告诉你如何依靠开源软件搭建Windows XP下的C++ IDE(虽然搭配Linux OS是更好的选择,但毫无疑问的是,Windows OS至少在易用性上要远好于Linux OS

goodfunman的专栏 1万+
上一篇: eclipse cdt 编译动态库,供msvc调用 -- 1.mingw msys 配置
下一篇: eclipse cdt 编译动态库,供msvc调用 -- 3.手写Makefile.cross
HuAN-WriteDemo
博客等级 码龄9年 239粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值