色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

如何在windows上編譯linux可用的動態鏈接庫?

榮姿康2年前15瀏覽0評論

1、背景

最近的性能測試中,壓測的某些接口返回的數據是一個復雜的json格式的字符串,而后續的接口中又需要把這個字符串修改后作為入參,自己處理起來比較麻煩。于是想到了把cjson編譯成動態鏈接庫在loadrunner的腳本中調用。另外,由于實際壓測用的是部署在linux上的負載機,還需要再編譯一個linux上的動態鏈接庫。這樣在調試時使用windows平臺的dll,而在壓測時使用linux平臺的so。先附上我編譯好的動態鏈接庫,可以直接在loadrunner中使用http://download.csdn.net/download/ultrahook/10126401

2、cjson

cjson是一個開源的json庫,它的優勢在于完全用c實現,因此適用性相當廣,用在loadrunner中也是毫無壓力。它的git主頁是https://github.com/DaveGamble/cJSON。

3、windows平臺

  1. 打開vsualstudio(我用的是vs2015,其他版本也可以,codeblock也沒問題,隨你喜歡),新建一個win32程序,程序類型選擇dll,附加選項選擇空項目。
  2. 把cJSON.c和cJSON.h拖到工程里。
  3. 設置編譯選項為release、x86(重要!),編譯。
  4. 將編譯出來的cjson.dll放到loadrunner腳本的根目錄下,然后在菜單File-Addfiletoscript,添加cjson.dll。
  5. 在代碼中加載cjson.dll,然后就可以使用cjson的函數了。先嘗試一下,

    • 1
    • 2
    • 3

    注意這里cjson_Version返回的是指針,但loadrunner認為是int,所以要顯式轉成指針,不然編譯不通過。

  6. 再看cjson解析字符串的函數。它的用法如下:

    • 1
    • 2

    這里需要用到cJSON.h中聲明的結構體cJSON,但直接引用cJSON.h在loadrunner中編譯不過。這個也有解決辦法,把cJSON.h中cJSON這個結構體的定義代碼復制到action的頂部就可以了,如圖cJSON.h中其他的變量或者宏也可以,如果編譯時報錯,復制過來就可以了。

4、Linux平臺

下面再編譯一個linux平臺上的動態鏈接庫,用在linux負載機上。cjson的代碼中帶了MakeFile,也有cmake,可以直接編譯。但如果linux系統是64位的,則默認編譯的是64位的so,無法被loadrunner加載,會提示“wrongELFclass:ELFCLASS64”。我們需要手動修改MakeFile,讓它編譯一個32位的so。1.修改cJSON源碼根目錄下的MakeFile打開MakeFile,分別在29、31、93、96行,增加-m32,如圖2.在源碼根目錄下執行

  • 1
  • 2

如果出現提示“fatalerror:sys/cdefs.h:Nosuchfileordirectory”,需要再裝一個依賴庫

  • 1
  • 2

3.編譯成功后,會得到名為libcjson.so.1.6.0的動態鏈接庫。把它復制到loadrunner腳本的根目錄下,同樣菜單File-Addfiletoscript,增加到腳本中。4.在腳本中加載so,這步和windows上是一樣的。這樣腳本就可以在linux下運行了。linux上安裝負載機可以參考我的另一篇文章http://blog.csdn.net/ultrahook/article/details/78524182。

  • 1
  • 2

5、遺留問題

最后有個遺留問題,loadrunner似乎不支持平臺宏,我想用宏控制,在windows下加載dll,linux下加載so,但沒有找到解決方法。