首页 > 系统相关 >windows下cmake C++库打包成C方式导出

windows下cmake C++库打包成C方式导出

时间:2023-08-08 10:44:52浏览次数:42  
标签:__ float cmake floor windows calibration C++ -- defined

背景

windows下当前的一个项目使用的编译器是mingw,想要使用一个使用msvc编译出来的C++库。

方法

重新创建一个库,这个使用extern "C"方式导出函数,在函数中调用msvc编译出来的库。

项目文件

文件结构

|-- CMakeLists.txt
|-- floor_calibration
|   |-- include
|   |   |-- floor_calibration.h
|   |   `-- floor_calibration_dll_global.h
|   `-- x64Windows
|       |-- floor_calibration.dll
|       `-- floor_calibration.lib
|-- floor_calibration_c.cc
`-- floor_calibration_c.h

CMakeLists.txt

cmake_minimum_required(VERSION 3.20)

project(floor_calibration_c)

set(CMAKE_CXX_STANDARD 17)

add_library(${PROJECT_NAME} SHARED floor_calibration_c.cc)

# 这里添加一个宏定义,可以“传递”到代码中,影响代码中的宏判断
target_compile_definitions(${PROJECT_NAME} PUBLIC -DFLOOR_CALIBRATION_DLL_LIBRARY) 

target_include_directories(${PROJECT_NAME} PRIVATE floor_calibration/include)
target_link_directories(${PROJECT_NAME} PRIVATE floor_calibration/x64Windows)

target_link_libraries(${PROJECT_NAME} floor_calibration)

floor_calibration_c.h

#if defined(_MSC_VER) || defined(WIN64) || defined(_WIN64) || defined(__WIN64__) || defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__)
#  define Q_DECL_EXPORT __declspec(dllexport)
#  define Q_DECL_IMPORT __declspec(dllimport)
#else
#  define Q_DECL_EXPORT     __attribute__((visibility("default")))
#  define Q_DECL_IMPORT     __attribute__((visibility("default")))
#endif

#if defined(FLOOR_CALIBRATION_DLL_LIBRARY)
#  define FLOOR_CALIBRATION_DLL_EXPORT Q_DECL_EXPORT
#else
#  define FLOOR_CALIBRATION_DLL_EXPORT Q_DECL_IMPORT
#endif

#ifdef __cplusplus
extern "C" {
#endif
    int FLOOR_CALIBRATION_DLL_EXPORT floor_calibration_c(unsigned char *img, float fx, float cx, float cy, double Hmat[]);
#ifdef __cplusplus
}
#endif

floor_calibration_c.cc

#include "floor_calibration_c.h"
#include "floor_calibration.h"

int floor_calibration_c(unsigned char *img, float fx, float cx, float cy, double Hmat[]){
   return floor_calibration(img, fx, cx, cy, Hmat);
}

编译

  1. cmake -B build .
  2. cmake --build build --config Release

编译结果:
image

新库中的符号:
image

原始库中的符号:
image

标签:__,float,cmake,floor,windows,calibration,C++,--,defined
From: https://www.cnblogs.com/litesite/p/17613484.html

相关文章

  • C# 读取带CheckBox复选框控件的表格-并集成到Windows Service里面
    最近的项目要求读取xls文件内的单元格,并且单元格旁边会有复选框标识类型。搜了下只有java的POI有例子,NOPI看项目文档好像是没有实现读取控件的功能。java实现POI POI如何解析出excel中复选框是否被选中https://blog.csdn.net/qq_29832217/article/details/104413475 C#导......
  • 病毒查杀(windows)的几个实例:
    qq盗号的木马:点击server.exe结束进程刷新以后又出来:用taskkill命令:taskkill/pid892taskkill/pid984taskkill/pid2752写入bat文件,全部干掉打不开regedit,看到映像劫持:我们改过名字就行了,regedit.exe改成qwe.exe病毒弄映像劫持是为了干掉杀软或者使用autoruns.exe找到:全部删......
  • 软件测试|最详细的Windows安装Python教程
    简介Python是一种简单易学的高级编程语言,在Windows系统下安装Python非常简单。本文将详细介绍Windows系统下安装Python的教程。步骤1:下载Python安装程序首先,您需要前往Python官方网站(www.python.org/downloads/)…2.x和Python3.x。因为Python2.x版本已经在2020年停止支持,所以我们......
  • 【GCC】在Windows下使用GCC编译程序
    1、安装到MinGW下载最新的安装包2、使用将安装包下载解压后,直接使用gcc进行编译:#include"stdio.h"intmain(){printf("hello");}>./gcc.exe-ohello.exeHello.c>./hello.exe......
  • 大一下第二学期期中知识复习梳理 之 c++动态内存分配
    一、动态内存分配基本概念1、数组实现顺序表的缺陷:静态内存管理——程序在编译时,根据数组元素类型和个数分配所需内存大小,在程序运行时无法改变。2、内存空间分布 3、动态内存管理1) 2)动态内存分配(1)操作符new动态分配变量数组(对象数组): 指针变量=new变量类型[变量表......
  • C++类和对象_继承
    继承概述作为面向对象的三大特性之一,继承(inheritance)是面向对象编程中代码复用的一种重要手段。继承是类设计层面的一种复用,它允许在保证原有类性质不变的基础上对其进行扩展新的属性和功能,产生新的类。例如,在类person中定义关于‘人’的基本属性和行为,以person为基础扩展......
  • Linux与Windows文件换行符差异
    当一个文件在Windows和Linux上交替操作后,经常遇到一些莫名其妙的问题,如shell脚本无法执行,找不到shell脚本等问题,本文谨就这一问题做一总结,供各位参考;格式差异换行符是行尾(EOL),是一个特殊的字符或字符序列,表示一行文本的结尾和新行的开头;表示换行符的实际代码因操作系统而异......
  • C++入门到放弃(10)——操作符重载:operator
    ​1.重载重载允许创建多个名称相同,但输入不同的函数,这些函数的参数列表不同,可以通过给予不同输入变量调用对应的函数。函数重载的关键是函数的参数列表。如果两个函数的参数数量和类型相同,同时参数的排列顺序也相同,那么就是同一个函数,不构成重载,它与f返回值和变量名都无关。v......
  • Windows c++检测笔记本是否处于睡眠状态
    最近遇到一个问题,程序需要检测电脑是否处于睡眠状态。一开始使用的方式是在WindowProc里监听WM_POWERBROADCAST消息,对PBT_APMSUSPEND``PBT_APMRESUMEAUTOMATIC消息做处理。但是实际测试中发现,这种方法在台式机中运行良好,但是放到笔记本电脑里就不行,系统休眠时监听不到WM_POWERBRO......
  • vc++2008通过paho c语言客户端接入MQTT
    因项目需要,IoT平台需要支持vc++2008接入。因为Paho的c++客户端不支持低版本vc++,所以不得不尝试通过c语言的库实现。类库下载从github下载c语言包。例如:eclipse-paho-mqtt-c-win32-1.3.12.ziphttps://github.com/eclipse/paho.mqtt.c/releases类库整合和配置解压出来的c语言......