国产aV无码片毛片一级韩国,午夜草草视频在线播放,中国人妻少妇精品一区二区,在线视频播放一区二区三区,一区二区三区久久av,日韩人妻系列中文字幕,国产av综合av亚洲av,欧美多人啊啊啊啊污污视频,国产大鸡巴插女生b视频

教育裝備采購(gòu)網(wǎng)
第八屆圖書館論壇 校體購(gòu)2

在Stata中編寫評(píng)估命令:編寫C++插件

教育裝備采購(gòu)網(wǎng) 2018-11-27 17:35 圍觀2261次

這篇文章是這系列文章的第三篇,說(shuō)明了如何用另一種語(yǔ)言(如C、C 或Java)編寫的代碼插入Stata,這種技術(shù)被稱為編寫插件,或者為Stata編寫一個(gè)動(dòng)態(tài)鏈接庫(kù)(DLL)。這篇文章介紹在C 中編寫插件,實(shí)現(xiàn)了在mymean11.ado中由mymean_work()執(zhí)行的計(jì)算。

這篇文章類似于《在Stata中編寫估計(jì)命令:編寫插件》。不同之處在于,插件代碼是用C 而不是c語(yǔ)言,如果讀者熟悉那篇文章的內(nèi)容,您會(huì)發(fā)現(xiàn)它在這里有很多的重復(fù)。

編寫一個(gè)hello-world C 插件

在進(jìn)行任何計(jì)算之前,我都會(huì)演示如何編寫和編譯一個(gè)與Stata通信的C 插件。Code block 1包含myhellocpp.ado的代碼。調(diào)用C 插件hellocpp,它只在Stata中顯示Hello。

第6行執(zhí)行插件,其句柄是hellocpp。第10行加載hellocpp中實(shí)現(xiàn)的插件。插件到句柄hellocpp。執(zhí)行語(yǔ)句在加載語(yǔ)句開始之前就出現(xiàn)了。Stata ado-files被完整讀取,每個(gè)ado-program、Mata函數(shù)或插件句柄都被加載到主ado-program的行之前。第10行實(shí)際上是在第6行之前執(zhí)行的。

在這種情況下,插件句柄的名稱hellocpp,必須與主ado編程的名稱不同,在本例中是myhellocpp,并且跟這個(gè).ado文件中定義的任何其他ado編程不同。

Code block 2中的Hello.cpp代碼。

第2行包括Stata插件頭文件stplugin.h。第6行是Stata C 插件的入口函數(shù)的標(biāo)準(zhǔn)聲明。在stata_call(),argc包含了傳遞給插件的參數(shù)的數(shù)量,而字符串a(chǎn)rgv將包含參數(shù)本身。

第8行聲明并為C 字符數(shù)組msg分配空間。使用字符數(shù)組可能看起來(lái)很奇怪,因?yàn)镃 程序通常使用C 字符串來(lái)操縱字符串。我們需要字符數(shù)組,因?yàn)樵赟tata程序接口(SPI)中接受字符串參數(shù)的函數(shù)使用C/C 字符數(shù)組。

例如,在第12行,SPI函數(shù)SF_display(),它使Stata從C 中顯示Hello,接受了C 字符數(shù)組msg。SF_display()不接受在第10行創(chuàng)建的C 字符串mystring。出于這個(gè)原因,我在第11行中復(fù)制了C mystring包含的字符數(shù)組msg。第14行返回0作為返回代碼。注意,我把字面上的0作為預(yù)期的ST_retcode。

現(xiàn)在,將討論如何從hello.cpp插件創(chuàng)建hellocpp.plugin插件。目錄中包含了myhellocpp.ado和hello.cpp,還有stplugin.cpp。stplugin.cpp是stplugin.c的副本。我必須把stplugin.c復(fù)制到stplugin.cpp中,因?yàn)橛行〤 編譯器不會(huì)把.c文件當(dāng)作C 源文件來(lái)處理。stplugin.c定義的函數(shù),在Stata中可以用它調(diào)用stata_call()函數(shù)。

不要更改stplugin.h或stplugin.c的內(nèi)容。事實(shí)上,您甚至不需要管它們。在我的OS X Mac上安裝了命令行開發(fā)者工具,我使用g 從stplugin.cpp和hello.cpp創(chuàng)建hellocpp.plugin,通過(guò)輸入g -bundle -DSYSTEM=APPLEMAC stplugin.cpp hello.cpp -o hellocpp.plugin

上面的g 命令編譯兩個(gè).cpp文件并將它們鏈接起來(lái)創(chuàng)建DLL hellocpp.plugin,可以被myhellocpp.ado調(diào)用。

在這篇文章的附錄中,我提供了在其他平臺(tái)創(chuàng)建hellocpp.plugin的說(shuō)明。https://www.stata.com/plugins/為編寫和編譯C 插件提供完整的文檔。

已經(jīng)創(chuàng)建了hellocpp.plugin,就可以在Stata中執(zhí)行myhellocpp。

示例2: myhellocpp

為簡(jiǎn)單起見,stplugin.h, stplugin.cpp, hello.cpp, myhellocpp.ado和hellocpp.plugin在同一個(gè)目錄中。對(duì)于較大的項(xiàng)目,我把.ado和.plugin文件放到Stata ADOPATH目錄中,并使用我的編譯器環(huán)境來(lái)管理我放置頭文件和C 源文件。對(duì)于本文中的示例,我將所有的.ado文件、頭文件、C 源文件和創(chuàng)建的.plugin文件放入單個(gè)目錄中。

在插件中訪問(wèn)Stata數(shù)據(jù)

hellocpp.plugin使Stata顯示在插件內(nèi)創(chuàng)建的內(nèi)容。下一步是讓插件訪問(wèn)Stata中的數(shù)據(jù)。為了說(shuō)明這個(gè)過(guò)程,我將討論mylistcpp.ado,它使用一個(gè)插件來(lái)列出對(duì)指定變量的觀測(cè)。

讓我們先看一下ado-code。

在第6行,syntax創(chuàng)建三個(gè)本地宏。它將用戶指定的變量放入本地宏varlist中,將用戶指定的if條件放入本地宏if中,將用戶指定的in范圍放入到本地宏in中。我將max=3指定為syntax,變量的限制數(shù)量為3。這個(gè)限制是多余的,我不需要它作為Stata/Mata程序的例子,但是它簡(jiǎn)化了示例C 插件。

在第7行中,marksample創(chuàng)建了一個(gè)包含樣本的變量,并將其名稱放在本地宏touse中。每個(gè)排除觀測(cè)值包含樣本的變量為0,每個(gè)包含觀測(cè)值的變量為1。marksample使用本地宏varlist中的變量,如果本地宏中的if條件,以及本地宏in的范圍來(lái)創(chuàng)建樣本包容變量(所有三個(gè)本地宏都是由syntax創(chuàng)建的)。如果本地宏varlist中的任何變量都包含缺失值,則排除一個(gè)觀測(cè)結(jié)果。如果它被本地宏if的條件排除,或者它被本地宏的范圍排除在外,則會(huì)將觀測(cè)排除在外。

第9行,進(jìn)一步簡(jiǎn)化了C 插件,通過(guò)顯示由插件列出的值的變量的名稱。

第10行,plugin調(diào)用mylistwcpp.plugin。因?yàn)椤皏arlist”是指定的,SPI函數(shù)SF_vdata()將能夠訪問(wèn)本地宏varlist中包含的變量。因?yàn)閕f “touse”是指定的,如果touse中的包容樣本變量為0,那么SPI函數(shù)SF_ifobs()將返回0; 如果包含樣本變量為1,則函數(shù)將返回1。因?yàn)椤癷n”被指定,SPI函數(shù)SF_in1()和SF_in2()分別返回在用戶指定范圍的第一個(gè)和最后一個(gè)觀測(cè)值。

指定“In”不是識(shí)別用戶指定的樣本所必需的,因?yàn)閕f“touse已經(jīng)指定了這個(gè)包含樣本的信息。然而,指定“in”可以極大地減少循環(huán)中對(duì)數(shù)據(jù)的觀測(cè)范圍,從而加快代碼的速度。

在包含mylistw.cpp, stplugin.cpp和stplugin.h的目錄中,我通過(guò)輸入下面的內(nèi)容在Mac上創(chuàng)建了mylistwcpp.plugin,

g -bundle -DSYSTEM=APPLEMAC stplugin.cpp mylistw.cpp -o mylistwcpp.plugin

在這里,討論的是mylistw.cpp如何說(shuō)明Stata中C 插件的結(jié)構(gòu),并解釋了代碼中使用的Stata插件接口(SPI)所定義的類型和功能。

如果Stata運(yùn)行順利的話,mylistw.cpp會(huì)返回0。如果出錯(cuò),它會(huì)返回一個(gè)非零錯(cuò)誤代碼。

每次調(diào)用mylistw.cpp中一個(gè)可能失敗的函數(shù)時(shí),可以檢查它的返回代碼。如果該函數(shù)失敗,我會(huì)讓Stata顯示一個(gè)錯(cuò)誤消息,并且將一個(gè)非零錯(cuò)誤代碼返回到Stata中。這種邏輯提供了mylisw.cpp的總體結(jié)構(gòu)。大多數(shù)代碼處理錯(cuò)誤條件,或不要將更多的字符放入字符串緩沖區(qū)中。

C 插件使用SPI中定義的函數(shù)或?qū)懭隨tata對(duì)象。mylistw.cpp并未返回任何結(jié)果,因此它有一個(gè)簡(jiǎn)單的結(jié)構(gòu):

? 使用SPI函數(shù)從Stata中指定的數(shù)據(jù)樣本中讀取。

? 使用標(biāo)準(zhǔn)的C 和SPI函數(shù)來(lái)列出對(duì)指定樣本的觀測(cè)值,并保持指定樣本中有多少觀測(cè)值的計(jì)數(shù)器。

? 使用標(biāo)準(zhǔn)的C 和SPI函數(shù)來(lái)顯示樣本中的第一個(gè)觀測(cè)值、樣本中最后的觀察值,以及在指定的樣本中有多少觀測(cè)值。

現(xiàn)在,我將討論mylistw.cpp的具體部分。

在第10-12行中,我使用SPI定義類型ST_int、ST_double和ST_retcode,用于SPI函數(shù)返回的變量,或者是Stata插件接口函數(shù)的參數(shù)。使用這些定義的類型是必要的,因?yàn)樗鼈儗?duì)原始C 類型的映射會(huì)隨著時(shí)間的變化而變化。

rc保存返回代碼,插件會(huì)返回到Stata中。在第17行,我將rc初始化為0。如果一個(gè)可能失敗的SPI函數(shù)執(zhí)行請(qǐng)求,則返回一個(gè)0的返回代碼。如果SPI函數(shù)不能執(zhí)行請(qǐng)求,那么它會(huì)返回一個(gè)非零返回碼。每當(dāng)我調(diào)用一個(gè)可能失敗的SPI函數(shù)時(shí),我都會(huì)把它保存在rc返回代碼中。如果rc不是0,我讓Stata顯示一條錯(cuò)誤消息,并讓插件返回保存在rc中的非零值。

第19、21和23行使用SPI函數(shù)。SF_in1()將in范圍指定的第一個(gè)觀測(cè)值放在第一位。SF_in2()將in范圍指定的最后一個(gè)觀測(cè)值放到最后。如果in范圍沒有被指定為插件,那么first包含1,而last包含數(shù)據(jù)集中觀測(cè)值的數(shù)量。SF_nvars()把varlist中的變量數(shù)量指定到nVars中。第31–33行確保我們跳過(guò)了在mylistcpp.ado第10行中被if限制排除的觀測(cè)結(jié)果。為進(jìn)一步說(shuō)明細(xì)節(jié),請(qǐng)參看示例2。

示例2: mylistcpp

在第31行,SF_ifobs(i)返回1時(shí),指定到插件中的if限制是1,觀測(cè)值是i,否則是0.

在mylistcpp.ado的第10行,我們看到傳遞給插件的if限制是“touse”。正如上文所討論的,本地宏touse中樣本包含變量對(duì)于排除的觀測(cè)值是0,并且對(duì)于包含的觀測(cè)值是1。

mylistcpp.ado中第10行的in范圍被包含,因此,mylistw.cpp第28行的觀測(cè)值是循環(huán)的,在in范圍內(nèi)可以從任何指定的地方開始或結(jié)束。在示例2中,mylistw.cpp第28行的循環(huán)只從2到10,而不是在自動(dòng)數(shù)據(jù)集中的74個(gè)觀測(cè)值進(jìn)行循環(huán)。

在示例2中,6個(gè)觀測(cè)值的樣本包含變量為1,而其他68個(gè)觀測(cè)值的變量為0。in 2/10的范圍不包括觀測(cè)值1和11-74的觀測(cè)值。在前10個(gè)觀測(cè)值中,2被排除在外,因?yàn)閞ep78缺失。排除一個(gè)觀測(cè)值,因?yàn)閠runk是21。為了進(jìn)行比較,在示例3中列出了2到10之間的9個(gè)觀測(cè)值。

回到mylistw.c的第39行, rc_st=SF_vdata(j,I,&value)將觀測(cè)值i在變量j中的值放入value中,并將SF_vdata()返回代碼放入rc中。如果一切順利,rc包含0,就不會(huì)輸入42-44行中的錯(cuò)誤塊。如果SF_vdata()不能將數(shù)據(jù)保存到value中,那么就會(huì)輸入42—44行中的錯(cuò)誤塊。誤差塊使Stata顯示錯(cuò)誤消息,并導(dǎo)致mylistw.plugin退出rc包含的錯(cuò)誤代碼。在誤差塊中,SF_error()使Stata顯示紅色的C 字符數(shù)組的內(nèi)容。

SF_vdata()只能訪問(wèn)數(shù)值變量之一,Stata的數(shù)據(jù)類型(byte、int、long、float或double)。(使用SF_vdata()的字符串?dāng)?shù)據(jù)。)不管變量的Stata數(shù)值類型是什么,SF_vdata()把結(jié)果作為ST_double來(lái)保存。在示例2中,mpg,trunk,rep78在Stata中都是int,但是每個(gè)都作為ST_double保存到value中。

在第47行,如果value是缺失值,那么SF_is_missing(value)返回1,否則它將返回0。如果其中一個(gè)變量中的任何一個(gè)觀測(cè)值包含缺失值,那么47-51行會(huì)導(dǎo)致mlistw.plugin退出,錯(cuò)誤信息為416。這些行是多余的,因?yàn)闃颖景兞總鬟f給mylistw.plugin排除包含缺失值的觀測(cè)。我包含這些行來(lái)說(shuō)明如何安全地從插件內(nèi)部排除缺失值,并重申C 代碼必須小心處理缺失值。Stata缺失的值是C 中有效的雙精度數(shù)。如果在計(jì)算中包含Stata缺失值,則會(huì)得到錯(cuò)誤的結(jié)果。剩下的行構(gòu)造C 字符數(shù)組,傳遞給Stata來(lái)顯示每個(gè)觀測(cè)結(jié)果,并顯示關(guān)于樣本的摘要信息。

C 插件中的均值估計(jì)

現(xiàn)在討論ado命令mymeancpp,使用mycalcscpp.plugin實(shí)現(xiàn)由mymean11.ado中的mymean_work()執(zhí)行的計(jì)算,這個(gè)內(nèi)容在《在Stata中編寫估計(jì)命令:編寫插件》討論過(guò)。

Code block 5中mymeancpp.ado的mymeancpp代碼,如下:

這個(gè)程序的大概結(jié)構(gòu)跟mymean10.ado和mymean11一樣,這個(gè)內(nèi)容在《在Stata中編寫估計(jì)命令:編寫插件》討論過(guò)。整體來(lái)看,mymeancpp.ado可以

? 解析用戶輸入

? 創(chuàng)建文件名稱和對(duì)象來(lái)保存結(jié)果

? 調(diào)用一個(gè)工作程序進(jìn)行計(jì)算

? 將工作程序返回的結(jié)果存儲(chǔ)在e()中,并且

? 顯示結(jié)果

mymeancpp.ado和mymean11.ado的主要區(qū)別這個(gè)工作程序是一個(gè)C 插件,而不是一個(gè)Mata函數(shù)。

第6行和第7行與mylistcpp.ado中的代碼相同。關(guān)于這些行如何創(chuàng)建本地宏varlist的描述,本地宏touse中樣本包含變量,其中本地宏包含范圍內(nèi)指定的任何用戶,具體可以參考 Getting access to the Stata data in your plugin中的mylistcpp.ado。

第8行將臨時(shí)名稱放入本地的宏b、V和N中。我們使用這些名稱來(lái)計(jì)算由C 插件計(jì)算的結(jié)果,并且我們知道,我們不會(huì)覆蓋用戶保存在全局Stata內(nèi)存中的任何結(jié)果(回想Stata矩陣和標(biāo)量是Stata中的全局對(duì)象);請(qǐng)參閱Programming an estimation command in Stata: A first ado-command中的Using temporary names for global objects討論的就是這方面的主題)。此外,Stata會(huì)在mymeancpp終止時(shí),刪除由tempname創(chuàng)建的臨時(shí)名稱中的對(duì)象。

第10-12行創(chuàng)建Stata矩陣來(lái)保存結(jié)果。我們使用由tempname創(chuàng)建的臨時(shí)名稱用于這些矩陣。

mymeancpp中第14行類似于mylistcpp.ado第10行的對(duì)應(yīng)部分。在這種情況下,plugin調(diào)用mycalcspp.plugin來(lái)做這個(gè)工作。varlist的詳細(xì)信息,if “touse”和“in”上文已經(jīng)討論過(guò)了。 新的情況是,我們傳遞參數(shù)'b'V'‘N’,將臨時(shí)名稱傳遞給mycalcs.plugin。

mycalcscpp.plugin可以:

? 執(zhí)行計(jì)算

? 將估計(jì)的方法放入Stata矩陣中,它的名稱在本地宏b中

? 將VCE放入Stata矩陣中它的名稱在本地宏V中,并且

? 將樣本內(nèi)的觀測(cè)數(shù)量放入Stata標(biāo)量中,其名稱位于本地宏N中

第16-18行將變量名稱放在估計(jì)方法向量的列條紋上,并在VCE矩陣的行和列條紋上。第19-21行將結(jié)果保存在e()中,第22行顯示結(jié)果。

現(xiàn)在,我將討論創(chuàng)建mycalcs.plugin的代碼。在討論細(xì)節(jié)之前,讓我們創(chuàng)建插件并運(yùn)行一個(gè)示例。

在包含mycalcs.cpp, mymatrix.cpp, mycalcsv.cpp, mymatrix.h, mycalcsv.h, stplugin.cpp和stplugin.h的目錄中,我創(chuàng)建了mycalcscpp.plugin在我的Mac上,通過(guò)輸入

g -bundle -DSYSTEM=APPLEMAC mycalcs.cpp mymatrix.cpp mycalcsv.cpp stplugin.cpp -o mycalcscpp.plugin

創(chuàng)建好mycalcscpp.plugin之后,我運(yùn)行示例3。

現(xiàn)在,我將討論用于創(chuàng)建mycalcscpp.plugin的C 代碼的一些問(wèn)題。我從code block 6中的mycalcs.cpp開始,包含入口函數(shù)代碼stata_call()。

總之,mycalcs.cpp中的代碼可以執(zhí)行以下任務(wù):

  1. 將Stata對(duì)象的名稱作為參數(shù)傳遞給C 字符數(shù)組,這些數(shù)組可以傳遞給SPI函數(shù)。

  2. 創(chuàng)建了MyMatrix類的bmat和vmat實(shí)例,并保存結(jié)果。

  3. 使用工作函數(shù)MyAve()和MyV()來(lái)計(jì)算保存在bmat、vmat和nobs中的結(jié)果。

  4. 使用MyMatrix類的成員函數(shù)CopyCtoStataMatrix(),SPI函數(shù)SF_scal_save()從bmat,vmat和nobs中復(fù)制結(jié)果到Stata對(duì)象中,它的名稱在步驟1中已經(jīng)被解析。

mycalcs.cpp很容易讀懂,因?yàn)槲野阉械募?xì)節(jié)都放到了MyMatrix類和工作函數(shù)中。MyMatrix類是在mymatrix.cpp中定義的,而工作函數(shù)是在mycalcsv.cpp中定義的。

像mylistw.cpp, mycalcs.cpp使用返回碼rc來(lái)處理錯(cuò)誤條件。如果函數(shù)進(jìn)行得很好,每個(gè)函數(shù)都返回0,并且如果每個(gè)函數(shù)執(zhí)行請(qǐng)求的作業(yè),則每個(gè)函數(shù)返回非零錯(cuò)誤代碼。如果返回的代碼不是0,mycalcs.cpp立即返回到Stata_call()中,這反過(guò)來(lái)又將非零代碼返回到Stata中。與錯(cuò)誤條件相關(guān)聯(lián)的錯(cuò)誤消息由工作函數(shù)顯示。

在point(2)中,我注意到bmat和vmat是MyMatrix類的實(shí)例。樣本平均值和VCE最好保存在矩陣中。為了使事物簡(jiǎn)單且自包含,我定義了一個(gè)使用矩陣行保存和僅需要的成員函數(shù)的裸矩陣類MyMatrix。除了成員函數(shù)copyCtoStataMatrix()之外,MyMatrix的代碼是標(biāo)準(zhǔn)C ,可以在code block 7中看到。

在第8行,我使用了一個(gè)預(yù)處理器宏來(lái)簡(jiǎn)化引用矩陣元素的代碼。我在第79行上定義了宏。

第57-77行包括了CopyCtoStataMatrix()代碼。第68行使用了一個(gè)我還沒有討論過(guò)的SPI函數(shù)。SF_mat_store(char *sname, ST_int i, ST_int j, ST_double val)將值val保存在Stata矩陣中的行i和列j中。矩陣的名稱包含在字符數(shù)組sname中。在一個(gè)基于索引的行中給出行i和列j。

第67行使用成員函數(shù)GetValue(i,j),在MyMatrix類的實(shí)例中返回矩陣的(i,j)元素。GetValue()在mymatrix.h中定義,這是包含MyMatrix類聲明的頭文件。Code block 8包含mymatrix.h中的代碼。

這段代碼只使用標(biāo)準(zhǔn)C 和我已經(jīng)討論過(guò)的編碼技術(shù)。在point(3)中,我注意到mycalcs.cpp使用工作函數(shù)MyAve()和MyV()來(lái)計(jì)算結(jié)果。這些函數(shù)是在code block 9中的mycalcsv.cpp定義的。

工作函數(shù)MyAve()是C 在Mata中MyAve()的實(shí)現(xiàn),具體參看《在Stata中編寫估計(jì)命令:編寫插件》。它將樣本平均值放入MyMatrix類的bmat實(shí)例中,并將樣本中觀測(cè)的數(shù)量放入nobs中。這個(gè)函數(shù)的大部分代碼都是標(biāo)準(zhǔn)C ,或者它使用了我已經(jīng)討論過(guò)的SPI函數(shù)。

第35行使用MyMatrix的IncrementByValue()成員函數(shù)。當(dāng)計(jì)算樣本均值并將其保存在一個(gè)向量b的jth元素中時(shí),需要將b[j] value保存到b[j]中。換句話說(shuō),b中jth元素增量的數(shù)量由vaule來(lái)表示。bmat中的bmat.IncrementByValue(0,j, value)增量元素j由value表示。

第39行使用MyMatrix的成員函數(shù)DivideByScalar()。bmat.DivideByScalar(z)將bmat的每個(gè)元素替換為能被z除的元素。

MyV()是Mata函數(shù)MyV()的C 實(shí)現(xiàn),這個(gè)內(nèi)容在《在Stata中編寫估計(jì)命令:編寫插件》有講到。它將VCE放入MyMatrix類的vmat實(shí)例中。這個(gè)函數(shù)的大部分代碼要么是標(biāo)準(zhǔn)C ,要么是我們已經(jīng)討論過(guò)的技術(shù)。第71、78和87行使用MyMatrix成員函數(shù)Storevalue()和GetValue(),這兩個(gè)函數(shù)由mymatrix.h定義。

vmat.StoreValue(i, j, z)將z值保存在MyMatrix的vmat實(shí)例(i, j)元素中。vmat.GetValue(i, j)返回保存在MyMatrix的vmat實(shí)例(i, j)元素中的值。

附錄

本文展示了如何使用命令行開發(fā)者工具在OS 10 Mac上編譯和鏈接一個(gè)插件。在這里給出了gcc編譯器在Windows 10和RedHat Linux上的命令。

Windows 10

這部分提供了在一個(gè)64位Windows 10系統(tǒng)上編譯和鏈接Cygwin環(huán)境中的插件的命令。與其他平臺(tái)不同,我們不能只使用gcc編譯器。在Cygwin中,gcc編譯了在Cygwin POSIX/Unix環(huán)境中運(yùn)行的應(yīng)用程序。我們希望使用Cygwin來(lái)編譯一個(gè)庫(kù),它將鏈接到一個(gè)本地的Windows應(yīng)用程序,并在其中運(yùn)行。Cygwin為Windows(MinGW)提供了極簡(jiǎn)的GNU編譯器來(lái)完成我們想做的事情。合適的編譯器是根據(jù)平臺(tái)不同而不同的。在我的64位x86-intel機(jī)器上,我使用了x86 64-w64-mingw32-g 編譯器。

hellocpp.plugin

在包含stplugin.h, stplugin.cpp和hello.cpp的目錄中,通過(guò)輸入以下內(nèi)容創(chuàng)建hellocpp.plugin,

x86_64-w64-mingw32-g -shared -static stplugin.cpp hello.cpp -o hellocpp.plugin

mylistwcpp.plugin

在包含stplugin.h,stplugin.cpp和mylistw.cpp的目錄中,通過(guò)輸入下面內(nèi)容創(chuàng)建mylistwcpp.plugin

x86_64-w64-mingw32-g -shared -static stplugin.cpp mylistw.cpp -o mylistwcpp.plugin

mycalcscpp.plugin

在包含stplugin.cpp,stplugin.h,mycalcs.cpp,mycalcsv.h和mycalcsv.cpp的目錄中,通過(guò)輸入以下內(nèi)容創(chuàng)建mycalcscpp.plugin,

x86_64-w64-mingw32-g -shared -static stplugin.cpp mycalcsv.cpp mycalcs.cpp -o mycalcscpp.plugin

RedHat Linux

這個(gè)子部分提供了gcc命令來(lái)編譯和鏈接RedHat Linux上的插件。

hellocpp.plugin

在包含stplugin.h, stplugin.cpp和hello.cpp的目錄中,通過(guò)輸入以下內(nèi)容創(chuàng)建hellocpp.plugin

g -shared -fPIC -DSYSTEM=OPUNIX stplugin.cpp hello.cpp -o hellocpp.plugin

在包含stplugin.h,stplugin.cpp和mylistw.cpp的目錄中,通過(guò)輸入以下內(nèi)容創(chuàng)建mylistwcpp.plugin,

g -shared -fPIC -DSYSTEM=OPUNIX stplugin.cpp mylistw.cpp -o mylistwcpp.plugin

mycalcscpp.plugin

在包含stplugin.cpp,stplugin.h,mymatrix.cpp,mycalcsv.cpp,mycalcs.cpp,mymatrix.h和mycalcsv.h的目錄中,通過(guò)輸入以下內(nèi)容創(chuàng)建mycalcscpp.plugin,

g -shared -fPIC -DSYSTEM=OPUNIX stplugin.cpp mymatrix.cpp mycalcsv.cpp mycalcs.cpp -o mycalcscpp.plugin

點(diǎn)擊進(jìn)入北京天演融智軟件有限公司展臺(tái)查看更多 來(lái)源:教育裝備采購(gòu)網(wǎng) 作者:科學(xué)軟件網(wǎng) 責(zé)任編輯:張肖 我要投稿
校體購(gòu)終極頁(yè)

相關(guān)閱讀

版權(quán)與免責(zé)聲明:

① 凡本網(wǎng)注明"來(lái)源:教育裝備采購(gòu)網(wǎng)"的所有作品,版權(quán)均屬于教育裝備采購(gòu)網(wǎng),未經(jīng)本網(wǎng)授權(quán)不得轉(zhuǎn)載、摘編或利用其它方式使用。已獲本網(wǎng)授權(quán)的作品,應(yīng)在授權(quán)范圍內(nèi)使用,并注明"來(lái)源:教育裝備采購(gòu)網(wǎng)"。違者本網(wǎng)將追究相關(guān)法律責(zé)任。

② 本網(wǎng)凡注明"來(lái)源:XXX(非本網(wǎng))"的作品,均轉(zhuǎn)載自其它媒體,轉(zhuǎn)載目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé),且不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。如其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)下載使用,必須保留本網(wǎng)注明的"稿件來(lái)源",并自負(fù)版權(quán)等法律責(zé)任。

③ 如涉及作品內(nèi)容、版權(quán)等問(wèn)題,請(qǐng)?jiān)谧髌钒l(fā)表之日起兩周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。

校體購(gòu)產(chǎn)品