亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 12021 | 回復: 8
打印 上一主題 下一主題

[SCO UNIX] 通過宏定義向二進制執(zhí)行碼寫入編譯信息 [復制鏈接]

論壇徽章:
0
跳轉到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2010-04-02 16:12 |只看該作者 |倒序瀏覽
本帖最后由 sunlan 于 2010-04-02 16:14 編輯

很多程序員都遇到過這樣的問題:已經(jīng)上線運行很長時間的系統(tǒng)出了問題,并且其中的很多程序經(jīng)過了多次的修改和升級,日志中的信息和現(xiàn)有的程序完全對不上號!怎樣才能查看程序的信息(例如版本號、編譯的時間等)、以確定程序的確切版本呢?很多的版本管理工具(例如CVS、SVN)可以幫你管理源碼的版本,但并不會在編譯的時候把編譯信息寫到二進制執(zhí)行碼中去。因此,還是要通過其他手段來實現(xiàn)。
在這里我提供了一種在可執(zhí)行程序中寫入編譯信息的辦法,希望對大家有幫助。
這個例子由兩個程序構成:test.c、version.c。其中version.c用于實現(xiàn)編譯信息的記錄,只要在現(xiàn)有的代碼中加入該程序,而不需要對已有代碼作任何的修改,就能實現(xiàn)二進制執(zhí)行碼的版本信息管理。

version.c

  1. #include <stdio.h>

  2. /* 以下兩個宏用于在編譯時通過宏定義傳入編譯信息
  3.   VERSION被替換為const char version[]=”Resivion: xxxx”
  4.   BUILDTIME被替換為 const char buildtime[]=”Buildtime: yyyymmdd”
  5. */
  6. VERSION;
  7. BUILDTIME;

  8. void print_version()
  9. {
  10. printf( “%s\n”, version );
  11. }

  12. void print_buildtime()
  13. {
  14. printf( “%s\n”, buildtime );
  15. }
復制代碼
print_version()和print_buildtime()這兩個函數(shù)不是必須的,只是讓version.c看起來“更象個程序”,同時可以提供在外部程序中輸出編譯信息的手段。

test.c

  1. #include <stdio.h>

  2. int main()
  3. {
  4. print_version();
  5. print_buildtime();
  6. }
復制代碼
在test.c中調(diào)用這兩個函數(shù)只是用于測試,正式版本的程序中可以用實際的代碼替換。

在Makefile中添加以下的內(nèi)容:

  1. version="const char version[]=\"Revision: 1.2.2\""
  2. buildtime="const char buildtime[]=\"Buildtime: `date +%Y%m%d`\""

  3. CFLAGS=-c –g –DVERSION=”$version” –DBUILDTIME=”$buildtime”

  4. testversion: test.o version.o
  5. cc –o $@ $?

  6. .c.o :
  7.     $(CC) $(CFLAGS) $<
復制代碼
如果你使用了版本管理工具,可以通過工具動態(tài)讀取版本(或修訂)信息,將信息賦值給version變量。你完全可以自己定義宏定義的格式,例如將編譯的精確時間寫進去。

編譯后執(zhí)行:

  1. $testversion
  2. Revision: 1.2.2
  3. Buildtime: 20100402
  4. $
復制代碼
通過strings命令查看:

  1. $string testversion | grep Revision
  2. Revision: 1.2.2
  3. $strings testversion | grep Buildtime
  4. Buildtime: 20100402
復制代碼
這個結果是我真正希望的!只要通過查看二進制執(zhí)行碼中的字符串,就可以確定程序的版本了!

論壇徽章:
0
2 [報告]
發(fā)表于 2010-04-02 17:28 |只看該作者
版主的肯定是好東西,可惜曲高者和寡

論壇徽章:
0
3 [報告]
發(fā)表于 2010-04-02 20:17 |只看該作者
搞SCO下開發(fā)的越來越少了吧,呵呵
SUN兄估計越來越難找到知己啦

論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
4 [報告]
發(fā)表于 2010-04-03 09:02 |只看該作者
這帖子咋說也應該是精華吧。

學習了。

論壇徽章:
0
5 [報告]
發(fā)表于 2010-04-20 04:20 |只看該作者
有一個問題一直憋了很久:buildtime部分為什么不用標準宏 __DATE__ 和 __TIME__ 呢?

論壇徽章:
0
6 [報告]
發(fā)表于 2010-05-06 11:37 |只看該作者
回復 5# numdisp


    個人喜好。用外部傳進去的更好控制輸出格式

論壇徽章:
0
7 [報告]
發(fā)表于 2010-05-11 16:57 |只看該作者
好帖要頂。!

論壇徽章:
0
8 [報告]
發(fā)表于 2010-06-17 13:15 |只看該作者
回復 6# sunlan


    我覺得也是啊,為什么不用系統(tǒng)宏__TIME__呢,你的編譯時間只打印到某一日,遠遠不能滿足要求啊

論壇徽章:
0
9 [報告]
發(fā)表于 2010-06-25 16:30 |只看該作者
回復 8# fbi333444


    在維護上一般知道是哪天編譯的程序就夠了。而且還需要與源碼管理軟件配合使用,以便能定位修改的程序
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP