swig匯出符號解決辦法

2021-09-01 05:41:57 字數 1428 閱讀 5102

關於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 ...