国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Linux開發_動態靜態庫創建與Makefile規則

DS小龍哥-嵌入式技術 ? 2022-09-17 15:41 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

【摘要】 介紹Linux下靜態庫、動態庫創建方式、完成靜態庫、動態庫調用,貼出字符串處理、時間管理兩個例子代碼。

??查找文件:

[root@wbyq /]# find / -name stdio.h

??文本搜索工具:

# grep -q "12345" /123.c || echo "12345" >> /123.c

??文本修改工具:sed

?? 練習:

1.?制作動態庫與靜態庫

2.? (擴展) 編寫一個find功能的程序:可以查找指定目錄下指定的文件。(關心多層目錄)

3.?編寫一個文本修改程序:可以修改指定文件中的內容。

(1)?將指定一行的內容全部替換為空格

(2)?將指定一個字符串替換為傳入指定的字符串。 ./a.out /123.c 888 666

??安裝軟件的命令:

[root@wbyq Packages]# rpm -ivh tree-1.5.3-2.el6.i686.rpm

任務1:靜態庫與動態庫

[root@wbyq test]# arm-linux-gcc 123.c -o app_1

[root@wbyq test]# arm-linux-gcc -static 123.c -o app_2

Linux下庫文件存放的位置: /lib (存放的是動態庫)

.so屬于動態庫, .a屬于靜態庫

動態庫稱為共享庫:gcc 123.c -o app

共享庫:程序在運行的時候去調用函數(載入函數)。

靜態庫:相關的函數在編譯的時候就已經拷貝到目標中。

[root@wbyq test]# file app_1

app_1: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.27, not stripped

[root@wbyq test]# file app_2

app_2: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, for GNU/Linux 2.6.27, not stripped

[root@wbyq test]# gcc 123.c -o app_3

[root@wbyq test]# file app_3

app_3: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, not stripped

??GCC編譯器的選項參數

-o :指定生成的目標文件名稱

-c :指定生成.o文件(編譯好的二進制文件)。

-g :在生成的目標文件中加入調試參數。適用于GDB調試。

-I :指定頭文件的路徑 。 gcc 123.c -I/work

-L :指定庫文件的路徑。gcc 123.c -L/work

-l :指定庫文件的名稱。gcc 123.c -L/work -labc

(實際上: libabc.so)

??生成動態庫的指令

gcc -fPIC -shared -o <庫文件名稱>.so 源文件名稱.c

庫文件名稱的命名規則: libxxx.so

調用動態庫出現的錯誤:

[root@wbyq test]# ./a.out

./a.out: error while loading shared libraries: libsum.so: cannot open shared object file: No such file or directory

1.?將xxx.so直接放到/lib目錄下。

2.?設置環境變量:LD_LIBRARY_PATH (存放系統庫文件的搜索路徑)

??生成靜態庫。 xxx.a

如果在相同的目錄下有靜態庫和動態庫,優先使用動態庫

# ar crv libsum.a sum.o

任務2:Makefile

Makefile :用于編寫程序的編譯規則。 make命令用于執行Makefile文件。

make常用的選項參數:

-n :輸出命令的執行過程,不執行名稱

-s :隱藏命令本身。 在命令前面加上@符號,可以隱藏命令本身。

$(shell pwd)

CC :特殊變量,用于存放編譯器。

?? 練習:

1.?Makefile自動化編譯

只是創建3個目錄,每個目錄下各有一個.c一個.h,一個Makefile文件

在頂層目錄下創建一個Makefile文件,,實現自動化編譯。

2.?Makefile自動化編譯

只是創建3個目錄,每個目錄下各有一個.c一個.h

在頂層目錄下創建一個Makefile文件,實現自動化編譯。


查找字符串并替換為其他字符串:

?查找字符串并替換為其他字符串。
  比如: 
“123dfjdfv123”  將123替換為888  結果: “888dfjdfv888”
“123dfjdfv123”  將123替換為8888  結果: “8888dfjdfv8888”
“123dfjdfv123”  將123替換為88  結果: “88dfjdfv88”
#include 
int main()
{
	char src_str[100];  //源字符串
	char new_str[50];   //替換后的字符串
	char find_str[50];  //查找的字符串
	int src_len=0,new_len=0,find_len=0; //存放字符串的長度
	int i,j,n;
	int seek_len=0; //記錄移動的長度
	
	/*1. 錄入字符串*/
	printf("輸入源字符串:");
	scanf("%s",src_str);
	printf("輸入查找的字符串:");
	scanf("%s",find_str);
	printf("輸入替換后的字符串:");
	scanf("%s",new_str);
	
	/*2. 計算字符串的長度*/
	while(src_str[src_len]!='\0')
	{
		src_len++;
	}
	while(find_str[find_len]!='\0')
	{
		find_len++;
	}
	while(new_str[new_len]!='\0')
	{
		new_len++;
	}
	/*3. 查找字符串*/
	for(i=0;i=i+find_len;n--)
				{
					src_str[n+seek_len]=src_str[n];
				}
				//開始替換
				for(n=0;nnew_len)//第三種情況:查找的長度大于替換的長度,向前移動
			{
				//計算向前移動的長度
				seek_len=find_len-new_len;
				//開始移動
				for(n=i+find_len-seek_len;n;n++)>;n++)>;i++)>

模擬電子時鐘

#include 
#include 

int year=0,month=0,day=0,hour=0,minute=0,sec=0,week=0;
void Get_RTC_Timer(int RTC_CNT);
void GET_Week(int sec_cnt);
int Get_year(int year);
int main()
{
	while(1)
	{
		int data=time(NULL);
		Get_RTC_Timer(data);
		printf("當前時間為: %d年%d月%d日  %d時%d分%d秒  星期%d\n",year,month,day,hour,minute,sec,week);
		sleep(1);
	}
	return 0;
}

const char month_r[12]={31,29,31,30,31,30,31,31,30,31,30,31}; //閏年月份表
const char month_p[12]={31,28,31,30,31,30,31,31,30,31,30,31}; //平年月份表
/*
將秒為單位的時間轉換為:年月日時分秒
*/
void Get_RTC_Timer(int RTC_CNT)
{
	int i=0;
	int year_n=1970; //基準年份
	GET_Week(RTC_CNT);    //獲取星期
	
	/*根據基準年份,減去過去年份*/
	while(RTC_CNT>=31536000)  //31536000是平年的秒數, 31622400是閏年的秒數
	{
		if(Get_year(year_n)) //閏年
		{
			if(RTC_CNT>=31622400)
			{
				RTC_CNT-=31622400; //減去閏年一年的秒數
			}
			else
			{
				break;    //退出循環
			}
		}
		else
		{
			RTC_CNT-=31536000; //減去平年一年的秒數
		}
		year_n++; //年份累加
	}
	year=year_n;    //年份
	
	/*減去過去的月份*/
	if(Get_year(year_n))     //減去閏年的月份
	{
		while(RTC_CNT>=month_r[i]*86400) //29*24*60*60
		{
		  RTC_CNT-=month_r[i]*86400;     //減去過去的月份
		  i++; //累加每一個月的秒數
		}
	}
	else               //減去平年的月份
	{
		while(RTC_CNT>=month_p[i]*86400) //86400=24*60*60
		{
		  RTC_CNT-=month_p[i]*86400;     //減去過去的月份
		  i++; //累加每一個月的秒數
		}
	}
	month=i+1; //因為月份是1月份開始,i是從0開始,這里的實際月份是i+1
	
	day=1;    //清空結構體成員--天數,用來存放新數據,天數是從1開始算
	/*減去過去的天數*/
	while(RTC_CNT>=86400)  //86400=24*60*60 一天的秒數
	{
		RTC_CNT-=86400;      //減去一天的秒
		day++;     //天自增
	}
	
	hour=0;  //清空結構體成員--小時數,用來存放新數據,小時數是從0開始算
	/*減去過去的小時*/
	while(RTC_CNT>=3600)  //3600=60*60
	{
		RTC_CNT-=3600;      //減去一小時的秒
		hour++;   //小時自增
	}
	hour+=8; //時區相差8
	
	minute=0;//清空結構體成員--分鐘數,用來存放新數據,分鐘數是從0開始算
	/*減去過去的分鐘*/
	while(RTC_CNT>=60)
	{
		RTC_CNT-=60;
		minute++;
	}
	sec=RTC_CNT;  //秒賦值,減到最后,剩下就是秒數
}
/*
獲取星期
*/
void GET_Week(int sec_cnt)
{
	int day_cnt=0;//天數
	day_cnt=sec_cnt/86400; //得到總天數
	switch(day_cnt%7)
	{
		case 0:week=4;break;
		case 1:week=5;break;
		case 2:week=6;break;
		case 3:week=7;break;
		case 4:week=1;break;
		case 5:week=2;break;
		case 6:week=3;break;
	}
}
/*
判斷閏年
閏年返回1
平年返回0
*/
int Get_year(int year)
{
	if((year%400==0)||((year%4==0)&&(year%100!=0)))//判斷閏年的條件
	{
		return 1;  //閏年
	}	
	return 0;    //平年
}
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 靜態庫
    +關注

    關注

    0

    文章

    21

    瀏覽量

    7771
  • Makefile
    +關注

    關注

    1

    文章

    125

    瀏覽量

    20337
  • 動態庫
    +關注

    關注

    0

    文章

    17

    瀏覽量

    6459
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    恒訊科技解析:如何安裝MySQL并創建數據

    安裝和管理MySQL不必復雜。只需幾分鐘,你就能在Linux服務器上搭建MySQL,創建第一個數據,甚至自動化備份——同時確保數據安全有序。 什么是 MySQL? MySQL 是一個關系型數據
    的頭像 發表于 01-14 14:25 ?173次閱讀

    關于晶振的靜態電容與動態電容

    靜態電容與動態電容 C0與C1 的區別是什么呢?
    的頭像 發表于 11-21 15:38 ?4364次閱讀
    關于晶振的<b class='flag-5'>靜態</b>電容與<b class='flag-5'>動態</b>電容

    蜂鳥hbird sdk的Makefile架構分析

    一.前言 簡介: 蜂鳥系列的MCU開發工具分為基于SDK和圖形化的IDE兩種開發方式,我們采用了基于SDK的開發方式, SDK的構建主要由多個Makefile文件組成,本文主要介紹了各
    發表于 10-30 07:15

    在Windows10上運行vivado使用tcl文件創建E203項目路徑錯誤的問題

    軟件版本是vivado2020.1,開發板是MCU200T。由于習慣使用了Windows系統所以想在Windows上創建vivado項目進行開發。但是由于Makefile更適合
    發表于 10-28 07:19

    飛凌嵌入式ElfBoard-Vim編輯器之靜態鏈接和動態鏈接

    需要加上-static參數。2.動態鏈接動態鏈接使用動態鏈接進行鏈接,生成的程序在執行的時候需要加載所需要的動態
    發表于 10-17 09:07

    RT-Thread Nano移植后動態創建線程創建不了怎么解決?

    RT-Thread Nano 移植后動態創建線程創建不了,靜態可以.直接燒錄DEMO也一樣,將RT_USING_HEAP開起來,使用動態
    發表于 09-19 06:28

    請問RT-Thread Studio可以編譯靜態(*.a)嗎?

    可以在RT-Thread Studio中創建生成靜態(*.a)的工程嗎?若不能可以用什么方式編譯靜態嗎?
    發表于 09-17 06:00

    rtth studio中nano 如何創建動態線程?

    有沒有大佬,可以說一下為什么靜態線程可以正常使用,動態線程怎么也使用不了。 具體需要什么配置才能使用動態線程創建。謝謝!
    發表于 09-11 06:01

    rtt studio中nano 如何創建動態線程?

    有沒有大佬,可以說一下為什么靜態線程可以正常使用,動態線程怎么也使用不了。 具體需要什么配置才能使用動態線程創建。謝謝!
    發表于 08-22 06:19

    如何在Unified IDE中創建視覺HLS組件

    組件開始,該組件可以導出為 XO 文件用于 Vitis 系統工程;這與“自上而下的流程”相反,后者從 Vitis 工程開始,然后將 HLS 組件導入該工程。我們將創建視覺示例“remap”,并在 Unified IDE 中執行每一步,而不是運行
    的頭像 發表于 07-02 10:55 ?1439次閱讀
    如何在Unified IDE中<b class='flag-5'>創建</b>視覺<b class='flag-5'>庫</b>HLS組件

    動態BGP與靜態BGP的區別?

    BGP(邊界網關協議,Border Gateway Protocol) 是互聯網中用于自治系統(AS)之間路由信息交換的核心協議。在實際部署中,BGP 可分為靜態 BGP和動態 BGP兩種方式,二者
    發表于 06-24 06:57

    ArkUI-X在Android平臺動態開發指南

    本文介紹如何在Android平臺進行ArkUI-X動態開發,包括動態化目錄規則及約束。 適用場景 動態化主要包括兩個典型場景: 場景1:框
    發表于 06-15 23:33

    RT-Thread Nano移植后動態創建線程創建不了怎么處理?

    RT-Thread Nano移植后動態創建線程創建不了,靜態可以.直接燒錄DEMO也一樣,將RT_USING_HEAP開起來,使用動態
    發表于 06-11 06:36

    詳解ADC電路的靜態仿真和動態仿真

    ADC電路主要存在靜態仿真和動態仿真兩類仿真,針對兩種不同的仿真,我們存在不同的輸入信號和不同的數據采樣,因此靜態仿真和動態仿真是完全不同的兩個概念,所以設置的參數不同。
    的頭像 發表于 06-05 10:19 ?1979次閱讀
    詳解ADC電路的<b class='flag-5'>靜態</b>仿真和<b class='flag-5'>動態</b>仿真

    NXP i.MX 91開發板#支持快速創建基于Linux?的邊緣器件

    NXP Semiconductors FRDM i.MX 91開發板設計用于評估i.MX 91應用處理器,支持快速創建基于Linux ^?^ 的邊緣器件。該開發板還設計用于入門級
    的頭像 發表于 05-19 10:55 ?2858次閱讀
    NXP i.MX 91<b class='flag-5'>開發</b>板#支持快速<b class='flag-5'>創建</b>基于<b class='flag-5'>Linux</b>?的邊緣器件