VisualGDB:Linux动态库项目创建、编译及库的使用

news2024/11/18 4:28:52

此篇接上篇 《VisualGDB:为Linux项目添加系统依赖库》,在本篇中我们重点分享一下如何基于VisualGDB 在VS中创建Linux动态库项目,如何编译及使用创建的动态库。

一、VisualGDB创建Linux动态库项目

如下,我们创建一个Linux下的动态库项目MyMath
在这里插入图片描述
在这里插入图片描述

二、编译动态库

我们稍微修改下生成的动态库模版项目,加点打印信息

#include "MyMath.h"
#include <stdio.h>

/*
	To test the library, include "MyMath.h" from an application project
	and call MyMathTest().
	
	Do not forget to add the library to Project Dependencies in Visual Studio.
*/

static int s_Test = 0;

int MyMathTest()
{
	printf("call MyMath:%d\n",++s_Test);
	return s_Test;
}

构建和编译项目,我们看到打印了MyMath项目的Build日志信息
在这里插入图片描述
编译完成,我们到linux系统上指定目录下看看
在这里插入图片描述
Okk,果然生成了库。

三、动态库的使用

如你们所想,本章我们创建的动态库项目跟我们在上篇创建的Linux多线程项目在同一个解决方案中。我们要做的就是在如下的LinuxPorject2项目中使用
在这里插入图片描述

1、在LinuxProject2项目中配置动态库的头文件路径,库的路径以及库文件名称

在这里插入图片描述

或者在这里插入图片描述

这里可以通过右侧的文件夹按钮选择要添加的路径即可,实测相对路径和绝对路径都ok。
记得在【Debug Settings】也设置一下
在这里插入图片描述

2、修改下代码,测试一下MyMath动态库接口

#include <iostream>
#include <pthread.h>
#include "MyMath.h"
using namespace std;

void* threadFunc(void* args)
{
	for (int i = 0; i < 10000; ++i)
	{
		MyMathTest();
		std::cout << "do work :" << i << std::endl;
	}
	
	return NULL;
	
}

int main(int argc, char *argv[])
{
	char sz[] = "Hello, World!";	//Hover mouse over "sz" while debugging to see its contents
	cout << sz << endl;	//<================= Put a breakpoint here
	
	// Multi thread
	pthread_t id;
	void* thread_result;
	pthread_create(&id, NULL,threadFunc, (void*)sz);
	
	pthread_join(id, &thread_result);
	return 0;
}

这里有一个点要提醒一下
在这里插入图片描述
包含头文件时,大小写必须要跟头文件名保持严格一致。在windows上,文件名是忽略大小写的,习惯中我们使用VS IDE智能联想补全,有时候就是默认小写;但是在Linux下文件区分大小写,你文件名不严格一致,你就会发现报错找不到这个头文件了,所以,一定注意。

不好,重新生成下解决方案,结果报错了,咋回事?
在这里插入图片描述
这里要注意,在linux下,我们库文件的命令方式是Libxxx.so,这里我们需要手动干一件事儿,回到Linux下,MyMath的库文件编译目录,手动拷贝一个符合格式规范的库的副本。如下:
在这里插入图片描述
再运行一下调试器
在这里插入图片描述
在这里插入图片描述
漂亮,MyMath动态库调用成功,正常打印输出了我们预想的内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1655847.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VscodeC/C++环境配置

引言 vscode是一款非常好用的编辑器&#xff0c;集成了大量的插件&#xff0c;具有很高的自由度&#xff0c;因此广受大家的喜爱。但是他本身是不带编译器的&#xff0c;因此如果要使用vscode来编译C/C程序的话&#xff0c;我们需要额外安装编译器并且为vscode配上环境。 编译…

02_SpringBoot程序快速启动

目录 打包命令启动启动成功测试结果 打包 点击package打包命令&#xff0c;会生成target目录&#xff0c;目录下会有生成的jar包 命令启动 打开cmd命令窗口&#xff0c;进入子项目的target目录下,输入命令后&#xff0c;回车… java -jar .\note-boot-core-1.0-SNAPSHOT.j…

跨平台美学!使用DevExpress Reports Office File API时如何管理字体?

DevExpress Office File API是一个专为C#, VB.NET 和 ASP.NET等开发人员提供的非可视化.NET库。有了这个库&#xff0c;不用安装Microsoft Office&#xff0c;就可以完全自动处理Excel、Word等文档。开发人员使用一个非常易于操作的API就可以生成XLS, XLSx, DOC, DOCx, RTF, CS…

C++ STL 中的二分查找函数(binary_search、lower_bound 和 upper_bound)

二分搜索是竞争性编程或任何算法竞赛的重要组成部分&#xff0c;了解速记函数可以减少编写代码的时间。二分查找是最有效的查找算法。 二分搜索是一种在排序数组中使用的搜索算法&#xff0c;通过重复将搜索间隔一分为二。二分查找的思想是利用数组已排序的信息&#xff0c;将时…

AMEYA360代理:稳先微车规WSD7025AD双通道高边智能开关介绍

高边开关是一种保护电子电路在过电流异常时免受电击穿破坏的电子元器件&#xff0c;与传统常规的保险丝不同&#xff0c;它通过负载电流检测防止系统组件因电流过大而造成短路损坏&#xff0c;在不损坏或恶化的条件下确保负载电流始终可控&#xff0c;提高汽车电气系统的可靠性…

统信UOS 1070如何制作GHOST镜像并安装到其他设备

原文链接&#xff1a;统信UOS 1070制作GHOST镜像并安装到其他设备 Hello&#xff0c;大家好啊&#xff01;对于想要快速部署多台计算机或在硬件更换后恢复系统的用户来说&#xff0c;制作一个GHOST镜像是一种非常高效的方法。今天&#xff0c;我将介绍如何在统信UOS 1070桌面操…

毕业论文怎么写? 推荐4个AI工具

写作这件事一直让我们从小学时期就开始头痛&#xff0c;初高中时期800字的作文让我们焦头烂额&#xff0c;一篇作文里用尽了口水话&#xff0c;拼拼凑凑才勉强完成。 大学时期以为可以轻松顺利毕业&#xff0c;结果毕业前的最后一道坎拦住我们的是毕业论文&#xff0c;这玩意不…

Golang | Leetcode Golang题解之第72题编辑距离

题目&#xff1a; 题解&#xff1a; func minDistance(word1 string, word2 string) int {m, n : len(word1), len(word2)dp : make([][]int, m1)for i : range dp {dp[i] make([]int, n1)}for i : 0; i < m1; i {dp[i][0] i // word1[i] 变成 word2[0], 删掉 word1[i], …

Spring IoCDI(1)—入门

目录 一、IoC & DI入门 1、Spring是什么 &#xff08;1&#xff09;什么是容器&#xff1f; &#xff08;2&#xff09;什么是IoC&#xff1f; 二、IoC介绍 1、传统程序开发 2、解决方案 3、IoC程序开发 4、IoC优势 三、DI介绍 通过前面的学习&#xff0c;我们知…

【项目实战】使用Yolov8 + tesseract 实现身份证信息解析(OCR) + 输入可为图片或者pdf + 完整代码 + 整体方案 + 全网首发

本项目可用于实验,毕业设计参考等。整体效果如下所示: 说明:图片来源于网络,如有侵权,请联系作者删除。 目录 一 数据集制作

【论文笔记】KAN: Kolmogorov-Arnold Networks 全新神经网络架构KAN,MLP的潜在替代者

KAN: Kolmogorov-Arnold Networks code&#xff1a;https://github.com/KindXiaoming/pykan Background ​ 多层感知机&#xff08;MLP&#xff09;是机器学习中拟合非线性函数的默认模型&#xff0c;在众多深度学习模型中被广泛的应用。但MLP存在很多明显的缺点&#xff1a;…

电机控制系列模块解析(19)—— 反电势观测器

随着现代工业自动化技术的飞速发展&#xff0c;交流电机作为关键的动力装置&#xff0c;其控制精度与效率日益受到重视。其中&#xff0c;无位置传感器控制技术由于其成本低、可靠性高、系统简洁等优点&#xff0c;逐渐成为研究热点。本文将对交流电机反电势观测器这一关键技术…

DevExpress Reporting 根据某个字段,合并单元格

1、根据字段值合并列&#xff08;设置为Merge、Value&#xff09; 2、根据字段Tag值合并列&#xff08;设置为Merge、Tag&#xff0c;并且手动绑定字段Tag值&#xff09;

uniapp + vue3 设置 axios proxy 代理,并重写路径

uniapp vue2 设置代理如下&#xff1a; 已生成的项目架构里面找到manifest.json文件&#xff0c;通过源码视图的方式打开文件&#xff0c;在文件中添加一下代码即可完成代理&#xff1a; "h5": {"devServer": {"disableHostCheck": true, //禁…

搜维尔科技:OptiTrack是基于LED墙虚拟制作舞台的最佳选择

OptiTrack因其绝对精度、易用性、可靠性以及与现场工具的完美集成而被选中&#xff0c;仍然是全球首屈一指的基于 LED 墙的虚拟制作舞台的选择。 当今虚拟制作阶段的低延迟、超精确摄像机跟踪标准 /- 0.2 毫米 位置精度1 < 10 毫秒 系统延迟 /- 0.1 度 旋转精度2 电影…

Windows电脑搭建HarmonyOS NEXTDeveloper Preview2环境详解

Windows电脑搭建HarmonyOS NEXTDeveloper Preview2环境详解&#xff1a; HarmonyOS NEXT Preview系列教程基于Api11讲解-IT营大地老师 1 、电脑要求以及注意事项 操作系统 &#xff1a; Windows10 64 位、 Windows11 64 位 内存 &#xff1a; 8GB 及以上&#xff0c;推荐 16G…

基于springboot实现公交线路查询系统项目【项目源码+论文说明】计算机毕业设计

基于SpringBoot实现公交线路查询系统演示 摘要 社会发展日新月异&#xff0c;用计算机应用实现数据管理功能已经算是很完善的了&#xff0c;但是随着移动互联网的到来&#xff0c;处理信息不再受制于地理位置的限制&#xff0c;处理信息及时高效&#xff0c;备受人们的喜爱。本…

解决在C#中方向键对控件焦点的控制

不要犹豫直接把下面这个程序复制进去就好了&#xff0c;不用担心0个引用&#xff0c;哈哈&#xff0c;可以的 public partial class MainForm : Form {public MainForm(){InitializeComponent();}protected override bool ProcessDialogKey(Keys keyData){// 检查是否是方向键…

RoNID:通过生成可靠标签与聚类友好型表征来实现新意图的发现

论文地址&#xff1a;https://arxiv.org/abs/2404.08977 原文地址&#xff1a;intents-are-not-going-away-ronid-is-a-new-intent-discovery-framework 2024 年 4 月 26 日 Robust New Intent Discovery&#xff08;RoNID&#xff09;框架致力于在开放域场景中识别已知意图并合…

Windows录屏怎么录?3个方法教会你

在Windows操作系统中&#xff0c;Windows录屏功能已经成为了许多用户日常工作与生活的必备工具。无论是教学演示、游戏直播&#xff0c;还是会议记录、视频教程制作&#xff0c;Windows录屏软件都能帮助我们轻松捕捉屏幕上的精彩瞬间。 本文将为您带来3种Windows录屏的方法&am…