linux项目_c语言:Makefile编写、动态库生成、添加动态库路径

news2024/11/18 6:15:56

一直想搞懂Linux中Makefile是怎么管理项目的,知识积累到一定程度后,我就做了一个自己的缩小项目去把剩下的细节搞清楚

代码:

Service.c:

#include <stdio.h>
#include "lib_sevr.h"
int main(){

    printf("输入a, b的值:\n");
    double a, b;
    scanf("%lf %lf", &a, &b);
    printf("%lf + %lf = %.1f\n", a, b, add(a, b));
    return 0;
}

lib_sevr.c:

#include "lib_sevr.h"

double add(double a, double b){
    return a + b;
}

lib_sevr.h:

#ifndef __LIB_SEVR__H__
#define __LIB_SEVR__H__

double add(double a, double b);

#endif  //!__LIB_SEVR__H__

项目.c文件的大致位置关系是这样的:

在这里插入图片描述

编译涉及到路径问题

gcc -fpic -shared -I../Client/ lib_sevr.c -o libsevr.so 
# 生成与路径无关的动态库,-I是指定头文件路径
vi /etc/profile
export LD_LIBRARY_PATH=/home/saisi/Desktop/Cproject/Server/
# 进入配置.so动态库的环境变量路径
source /etc/profile
#读取路径
#最好再重启一下,因为读取是只对本终端有效,退出后又要重新读取

因为动态库并不是写入可执行程序里的,可执行程序里只有动态库的链接,加载器在执行到相应位置后得通过这些环境变量找到动态库路径

gcc -o main -I../Client/ Server.c libsevr.so
# 将动态库链接到主函数,并生成可执行文件,-I仍是指定.h文件位置

在这里插入图片描述

可以执行,那么将上述编译操作写到Makefile文件中即可

# ~/Desktop/Cproject$ 
all:
	$(MAKE) -C Server

clean:
	rm -f ./Server/main ./Server/*.so
#~/Desktop/Cproject/Server$ 
all: MAIN

MAIN: Server.c libsevr.so
	gcc -o main -I../Client/ Server.c libsevr.so

libsevr.so: lib_sevr.c
	gcc -fpic -shared -I../Client/ lib_sevr.c -o libsevr.so 

当然还Makefile可以再优化

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

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

相关文章

【C++】内存管理:内存分布、new/delete

本篇主要介绍一下C的内存管理相关知识。C的内存管理和C语言保持一致。 1.C/C内存分布 一个程序的数据存储是需要分区的。常见的内存区域划分如下。 我们学C主要了解栈&#xff0c;堆&#xff0c;数据段&#xff0c;代码段 。 我们先看下面代码和相关问题。 int globalvar…

Python编码系列—Python命令模式:将请求封装为对象

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

RabbitMQ——消息的可靠性处理

1.业务分析 在业务的开发中&#xff0c;我们通常将业务的非核心业务交给MQ来处理&#xff0c;比如支付&#xff0c;在支付过后&#xff0c;我们需要扣减余额&#xff0c;修改支付单状态&#xff0c;修改订单状态&#xff0c;发送短信提醒用户&#xff0c;给用户增加积分等等&am…

技术分享|一文读懂三维建模技术

在上一期推文中&#xff0c;我们简要介绍了国产3A级大作游戏《黑神话&#xff1a;悟空》中应用的实时渲染技术&#xff0c;同时&#xff0c;还展示了RflySim工具链中基于Unreal Engine虚幻引擎开发的三维可视化显示软件—RflySim3D/UE5。它利用高逼真度的仿真技术&#xff0c;结…

商家营销工具架构升级总结

今年以来&#xff0c;商家营销工具业务需求井喷&#xff0c;需求数量多且耗时都比较长&#xff0c;技术侧面临很大的压力。因此这篇文章主要讨论营销工具前端要如何应对这样大规模的业务需求。 问题拆解 我们核心面对的问题主要如下&#xff1a; 1. 人力有限 我们除了要支撑存量…

全国省、市、县(区)土地利用类型及面积面板数据(2019-2022年)

土地利用类型是根据土地利用方式和地域差异对土地资源单元进行划分的基本土地地域单元。 2019年-2022年全国省、市、县&#xff08;区&#xff09;土地利用类型及面积面板数据_土地利用类型数据下载资源-CSDN文库https://download.csdn.net/download/2401_84585615/89466102 …

2024版最新Wireshark安装使用教程(非常详细)零基础入门到精通,收藏这一篇就够了_wireshark 4.4.0安装要求

前言 这是大白给粉丝盆友们整理的网络安全渗透测试入门阶段渗透测试工具第9篇。 喜欢的朋友们&#xff0c;记得给大白点赞支持和收藏一下&#xff0c;关注我&#xff0c;学习黑客技术 Wireshark 什么是WireShark&#xff1f;Wireshark 是一个开源抓包工具或者叫网络嗅探器&a…

FPGA-Vivado-IP核-逻辑分析仪(ILA)

ILA IP核 背景介绍 在用FPGA做工程项目时&#xff0c;当Verilog代码写好&#xff0c;我们需要对代码里面的一些关键信号进行上板验证查看。首先&#xff0c;我们可以把需要查看的这些关键信号引出来&#xff0c;接好线通过示波器进行实时监测&#xff0c;但这会用到大量的线材…

ViTamin——视觉-语言时代的可扩展视觉模型设计

人工智能咨询培训老师叶梓 转载标明出处 尽管视觉-语言模型&#xff08;VLMs&#xff09;已经取得了显著的成就&#xff0c;但在图像编码器的选择上&#xff0c;传统的视觉Transformer&#xff08;ViT&#xff09;依然是主流。尽管Transformer在文本编码领域已经证明了其有效性…

无线感知会议系列【5】 无线感知边界-1

前言&#xff1a; 无线感知边界是整个ISAC 里面一个研究的难点和重点。 本篇主要来源于2022 《WiFi感知边界研究-Ubicomp2022论文分享》 感知的相关论文组会 2016年无线感知研究主要是国内高校主导,各种无线感知论坛 2021年无线感知 VIVO,OPPO &#xff0c;华为&#xff0c;国…

LeetCode讲解篇之33. 搜索旋转排序数组

文章目录 题目描述题解思路题解代码 题目描述 题目链接 题解思路 旋转后的数组具备一个特性&#xff0c;如果把数组分割成两部分&#xff0c;必定至少有一部分是递增的&#xff0c;并且其中递增区间可以通过左端点小于右端点这个特征来确定 我们基于这个特性&#xff0c;进…

通信工程学习:什么是MIMO多输入多输出技术

MIMO:多输入多输出技术 MIMO(Multiple-Input Multiple-Output)多输入多输出技术是一种在无线通信中广泛应用的技术,它通过利用多个天线进行数据传输和接收,可以显著提高无线通信系统的性能和容量。以下是对MIMO技术的详细解释: 一、定义与原理 MIMO技术…

XWF使用指南

简介 X-Ways Forensics 是由 Stefan Fleischmann 编写的一个轻量化的应急响应及取证工具&#xff0c;是 WinHex 的法证版本&#xff0c;因此界面逻辑和 WinHex 较为相似。在配置好 mplayer 的情况下&#xff0c;程序总体积在 100MiB 左右&#xff0c;运行时内存占用极低&#…

【数据修复指南】手把手教你使用线性插值填补各类遥感数据缺失——Modis、Landsat和Sentinel

线性插值 1. 写在前面2. MODIS数据插值3. Landsat数据插值3.1 参数修改以适应其他类型的遥感数据3.2 Landsat数据汇总3.3 Sentinel卫星介绍 1. 写在前面 之前我写了使用年内均值或者中值来填补数据控制的方法&#xff0c;这种方法较为简单&#xff0c;不够精确。因此&#xff0…

面向人工智能: 对红酒数据集进行分析 (实验四)

由于直接提供截图是不切实际的&#xff0c;我将详细解释如何使用scikit-learn&#xff08;通常称为sk-learn&#xff09;自带的红酒数据集进行葡萄酒数据的分析与处理。这包括实验要求的分析、数据的初步分析&#xff08;完整性和重复性&#xff09;以及特征之间的关联关系分析…

SAP EWM QM 集成

目录 1 简介 2 业务流程 3 后台配置 4 主数据 5 业务操作 5.1 创建 EWM 交货单 5.2 不同的质检结果导致不同的入库地点 - 质检通过 5.3 不同的质检结果导致不同的入库地点 - 质检失败 1 简介 EWM 与 QM (quality management) 集成,自动 or 手动执行质检流程。质检可以…

现代cpp多线程与并发初探

个人博客:Sekyoro的博客小屋 个人网站:Proanimer的个人网站 在现代c(c20)中,有了jthread和协程的概念,使得我们编写并发程序更加方便. 这里作简单学习. 前言知识 多线程编程 std::thread 用于创建一个执行的线程实例,所以它是一切并发编程的基础,使用时需要包含 <thread…

XSS(内含DVWA)

目录 一.XSS的攻击方式&#xff1a; 1. 反射型 XSS&#xff08;Reflected XSS&#xff09; 2. 存储型 XSS&#xff08;Stored XSS&#xff09; 3. DOM型 XSS&#xff08;DOM-based XSS&#xff09; 总结 二..XSS的危害 三.常见的XSS方式 1.script标签 四.常见基本过滤方…

假期旅行数仓项目--OLAP

需要这个完整离线数仓项目的源码和流程PPT可以私信我&#xff0c;可以帮助解决项目中遇到的问题&#xff0c;做完项目可以让你对数仓有更加清晰的认识 项目流程&#xff1a; 配置文件 kafka server.properties hive : hvie-site.xml 启动mysql 的binlog日志 修改maxwell配置…

QT:常用类与组件

1.设计QQ的界面 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPushButton> #include <QLineEdit> #include <QLabel>//自定义类Widget,采用public方式继承QWidget&#xff0c;该类封装了图形化界面的相关操作&#xff…