SWIG 在 Windows 平台上的编译

 【背景】参考 SWIG官网 上的步骤折腾我三天都没搞定,MinGW 和 MSYS 一堆的问题,版本高了、低了都不行,生成的configure都有问题,擦了。。。好在柳暗花明又一村,今天搞定了用VS2015编译SWIG,比官网上的那些步骤简单超多,哇哈哈哈~~~

1 配置PCRE 静态库工程

  这个PCRE 是SWIG 依赖的正则表达式开源库。用源码编译,步骤虽然看起来有点多,但实际上也并不麻烦。这里写一下编译静态库的步骤:

(1)解压源码包(比如这里用的是 pcre-8.10.tar.bz2)

(2)把 config.h.generic 重命名成 config.h

(3)把 pcre_chartables.c.dist 重命名为 pcre_chartables.c

(4)工程中使用pcre_internal.h 和 ucp.h (实际上我把所有 *.h 都引入到工程也没事)

(5)添加以下源文件(这些文件支持char类型字符串已经足够了;如果需要支持wchar 16字节或者32字节字符串则还需要另增文件,这里先不写了):

 1 pcre_byte_order.c
 2 pcre_chartables.c
 3 pcre_compile.c
 4 pcre_config.c
 5 pcre_dfa_exec.c
 6 pcre_exec.c
 7 pcre_fullinfo.c
 8 pcre_get.c
 9 pcre_globals.c
10 pcre_jit_compile.c
11 pcre_maketables.c
12 pcre_newline.c
13 pcre_ord2utf8.c
14 pcre_refcount.c
15 pcre_string_utils.c
16 pcre_study.c
17 pcre_tables.c
18 pcre_ucd.c
19 pcre_valid_utf8.c
20 pcre_version.c
21 pcre_xclass.c
22 pcre_try_flipped.c
View Code

  (6)在静态库工程中声明三个宏定义:DLL_EXPORTPCRE_STATICHAVE_CONFIG_H

2 配置 SWIG 可执行程序工程

  SWIG 编译更简单一些,把所有头文件和源文件都加载进来即可:

(1)配置头文件目录,加载所有:Include、CParse、DOH、Modules、Preprocessor、Swig

(2)配置源文件目录,加载所有:CParse、DOH、Modules、Preprocessor、Swig

(3)在可执行工程中添加两个宏定义:HAVE_CONFIG_HPCRE_STATIC

3 abtor工程配置

  这里直接给一下abtor工程配置,以供后续参考:

  1 #
  2 # vars
  3 #
  4 # ABTOR_TARGET : windows, mac, linux, android, ios
  5 # ABTOR_HOST : windows, mac, linux
  6 # ABTOR_CONFIG : debug, release
  7 # ABTOR_VERSION
  8 #
  9 #
 10 
 11 
 12 #
 13 # functions
 14 #
 15 # abtor_path
 16 # abtor_path_list
 17 # abtor_glob
 18 # abtor_remove
 19 # abtor_exported_path
 20 # abtor_include_dir
 21 #
 22 
 23 abtor_settings(
 24   abtor_minimum_required='1.1.1',
 25 )
 26 target_platform = [];
 27 if ABTOR_TARGET == 'mac':
 28   target_platform = ['/usr/local/include']
 29 
 30 abtor_global_ccxx(
 31     defines=['HAVE_CONFIG_H', 'PCRE_STATIC'],
 32     cxx_flags="",
 33     c_flags="",
 34     include_dirs=target_platform,
 35 )
 36 
 37 ##################################################
 38 ## CCache
 39 wrapper_ccache_incs_dir = []
 40 wrapper_ccache_incs_dir.append(abtor_path('CCache'))
 41 
 42 wrapper_ccache_incs = []
 43 wrapper_ccache_incs += abtor_glob(abtor_path('CCache/'), '*.h')
 44 
 45 wrapper_ccache_srcs = []
 46 wrapper_ccache_srcs += abtor_glob(abtor_path('CCache/'), '*.c')
 47 
 48 ##################################################
 49 ## pcre
 50 pcre_incs_dir = ['pcre_8.10']
 51 
 52 pcre_incs = []
 53 pcre_incs += abtor_glob(abtor_path('pcre_8.10/'), '*.h')
 54 
 55 pcre_srcs = []
 56 pcre_srcs += abtor_glob(abtor_path('pcre_8.10/'), 'pcre_byte_order.c')
 57 pcre_srcs += abtor_glob(abtor_path('pcre_8.10/'), 'pcre_chartables.c')
 58 pcre_srcs += abtor_glob(abtor_path('pcre_8.10/'), 'pcre_compile.c')
 59 pcre_srcs += abtor_glob(abtor_path('pcre_8.10/'), 'pcre_config.c')
 60 pcre_srcs += abtor_glob(abtor_path('pcre_8.10/'), 'pcre_dfa_exec.c')
 61 pcre_srcs += abtor_glob(abtor_path('pcre_8.10/'), 'pcre_exec.c')
 62 pcre_srcs += abtor_glob(abtor_path('pcre_8.10/'), 'pcre_fullinfo.c')
 63 pcre_srcs += abtor_glob(abtor_path('pcre_8.10/'), 'pcre_get.c')
 64 pcre_srcs += abtor_glob(abtor_path('pcre_8.10/'), 'pcre_globals.c')
 65 pcre_srcs += abtor_glob(abtor_path('pcre_8.10/'), 'pcre_jit_compile.c')
 66 pcre_srcs += abtor_glob(abtor_path('pcre_8.10/'), 'pcre_maketables.c')
 67 pcre_srcs += abtor_glob(abtor_path('pcre_8.10/'), 'pcre_newline.c')
 68 pcre_srcs += abtor_glob(abtor_path('pcre_8.10/'), 'pcre_ord2utf16.c')
 69 pcre_srcs += abtor_glob(abtor_path('pcre_8.10/'), 'pcre_refcount.c')
 70 pcre_srcs += abtor_glob(abtor_path('pcre_8.10/'), 'pcre_string_utils.c')
 71 pcre_srcs += abtor_glob(abtor_path('pcre_8.10/'), 'pcre_study.c')
 72 pcre_srcs += abtor_glob(abtor_path('pcre_8.10/'), 'pcre_tables.c')
 73 pcre_srcs += abtor_glob(abtor_path('pcre_8.10/'), 'pcre_ucd.c')
 74 pcre_srcs += abtor_glob(abtor_path('pcre_8.10/'), 'pcre_valid_utf8.c')
 75 pcre_srcs += abtor_glob(abtor_path('pcre_8.10/'), 'pcre_version.c')
 76 pcre_srcs += abtor_glob(abtor_path('pcre_8.10/'), 'pcre_xclass.c')
 77 pcre_srcs += abtor_glob(abtor_path('pcre_8.10/'), 'pcre_try_flipped.c')
 78 
 79 ##################################################
 80 ## Wrapper
 81 wrapper_incs_dir = []
 82 wrapper_incs_dir.append(abtor_path('pcre_8.10'))
 83 wrapper_incs_dir.append(abtor_path('Source/Include'))
 84 wrapper_incs_dir.append(abtor_path('Source/CParse'))
 85 wrapper_incs_dir.append(abtor_path('Source/DOH'))
 86 wrapper_incs_dir.append(abtor_path('Source/Modules'))
 87 wrapper_incs_dir.append(abtor_path('Source/Preprocessor'))
 88 wrapper_incs_dir.append(abtor_path('Source/Swig'))
 89 
 90 wrapper_incs = []
 91 wrapper_incs += abtor_glob(abtor_path('Source/Include/'), '*.h')
 92 wrapper_incs += abtor_glob(abtor_path('Source/CParse'), '*.h')
 93 wrapper_incs += abtor_glob(abtor_path('Source/DOH'), '*.h')
 94 wrapper_incs += abtor_glob(abtor_path('Source/Modules'), '*.h')
 95 wrapper_incs += abtor_glob(abtor_path('Source/Preprocessor'), '*.h')
 96 wrapper_incs += abtor_glob(abtor_path('Source/Swig'), '*.h')
 97 
 98 wrapper_srcs = []
 99 wrapper_srcs += abtor_glob(abtor_path('Source/CParse'), '*.c')
100 wrapper_srcs += abtor_glob(abtor_path('Source/DOH'), '*.c')
101 wrapper_srcs += abtor_glob(abtor_path('Source/Modules'), '*.cxx')
102 wrapper_srcs += abtor_glob(abtor_path('Source/Preprocessor'), '*.c')
103 wrapper_srcs += abtor_glob(abtor_path('Source/Swig'), '*.c')
104 
105 wrapper_libs_dir = []
106 #wrapper_libs_dir.append(abtor_path('pcre/pcre-swig-install/lib'))  # 这个不需要了
107 
108 abtor_ccxx_library(
109   name = 'pcre',
110   valid = True,
111   link_style = 'static',
112   defines = ['DLL_EXPORT'],
113   include_dirs = pcre_incs_dir,
114   headers = pcre_incs,
115   srcs = pcre_srcs,
116   lib_dirs = [],
117   link_libs = [], 
118   linux_deps = [],
119   mac_deps = [],
120 )
121 
122 abtor_ccxx_library(
123   name = 'ccache',
124   valid = True,
125   link_style = 'static',
126   include_dirs = wrapper_ccache_incs_dir,
127   headers = wrapper_ccache_incs,
128   srcs = wrapper_ccache_srcs,
129   lib_dirs = wrapper_libs_dir,
130   link_libs = ['pcre'], 
131   linux_deps = ['dl','pcre','z'],
132   mac_deps = ['dl','pcre','z'],
133 )
134 
135 abtor_ccxx_binary(
136   name = 'autoWrapper',
137   valid = True,
138   include_dirs = wrapper_incs_dir,
139   headers = wrapper_incs,
140   srcs = wrapper_srcs,
141   lib_dirs = wrapper_libs_dir,
142   link_libs = ['pcre'], 
143   linux_deps = ['dl','pcre','z'],
144   mac_deps = ['dl','pcre','z'],
145 )
View Code

   使用命令生成VS2015工程(abtorw.bat  project vs2015 -t windows -a x64 -v -V)如下:

猜你喜欢

转载自www.cnblogs.com/kuliuheng/p/10099579.html