關於swig使用過程中,有時c++標頭檔案有匯出符號,這在window系統下是很常見的事,經常看到下面的巨集定義:
#if defined(_msc_ver) || defined(__cygwin__) || defined(__mingw32__) || defined( __bcplusplus__) || defined( __mwerks__)
# if defined( osg_library_static )
# define osg_export
# elif defined( osg_library )
# define osg_export __declspec(dllexport)
# else
# define osg_export __declspec(dllimport)
# endif
#else
# define osg_export
#endif
在用swig生成包裝檔案 xx_wrap.cxx 時,有這個匯出巨集會異常退出。找了很久也沒有辦法,網上說不支援。就這樣乙個動態庫有兩份原始碼?這不是程式設計師做的事。
翻看了osg的乙個轉換工程,終於知道,重定義一下匯出巨集就ok了。
但是不能用#define,要用swig的增強巨集:
%define osg_export
%enddef
在此記錄一下,希望可以幫助你少走點路。
順便看一下swig的這個%define有什麼高明之處。
以下為譯文:
swig 提供了增強巨集功能,以 %define 和 %enddef 指示. 示例如下:
%define arrayhelper(type,name)
%inline %
void delete_ ## name(type *t)
type name ## _get(type *t, int index)
void name ## _set(type *t, int index, type val)
%}%enddef
arrayhelper(int, intarray)
arrayhelper(double, doublearray)
%define最開始是為了定義乙個大的**塊。但是不像c預處理巨集那樣,每一行需要用(\)
結尾,但是需要用第乙個碰到的%enddef來結束巨集定義。此外,當這樣的巨集被擴充套件時,它們通過c預處理器進行重新分析。因此,swig巨集可以包含所有除巢狀的%define以外的其他預處理器指令定義語句。
swig巨集能力是產生大量**的一種非常快速和簡單的方法。事實上,很swig的高階特徵和庫都是使用此機制(如c++模板支援)構建的。
參考:my coding.net
定義
Ajax下匯出Excel的解決辦法
ajax下excel不能按原來的方式匯出,因為在非同步方式下response.write 是會出錯的,所有在頁面載入的時候可以將匯出按鈕註冊為同步方式,同時在updatepanel裡不能註冊匯出按鈕,即可解決該問題。對於vs自帶的 ajax此辦法即可解決,網上找了n久,很多都是第三方ajax 非vs...
PHP匯出Excel超過26列解決辦法
最近做乙個需求,匯出excel,開始測試沒問題,當資料量大時會報錯invalid cell coordinate 1 google之後,原來當excel行超過26時,行會變成 a 自然無法識別.記錄踩坑過程.將列的數字序號轉成字母使用,如下 phpexcel cell stringfromcolum...
CocoaPods解決辦法
之前一直在使用的cocoapods在公升級到os x10.11後突然無法使用,提示以下錯誤 bash pod command not found 無奈只能重新安裝 sudo gem install cocoa pods 但奇怪的是重新安裝也不成功 error while executing gem ...