Windows下编译libxls32位和64位链接库

来源:互联网 发布:大学生防网络诈骗 编辑:程序博客网 时间:2024/05/17 06:52

1、首先下载cygwin,32位操作系统下载setup-x86.exe,64位电脑下载setup-x86_64.exe。

2、安装cygwin下的编译环境

      编译x86链接库安装以下组件:

    Devel下的make、mingw64-i686-binutils、mingw64-i686-gcc-core、mingw64-i686-gcc-g++、mingw64-i686-win-iconv

     编译x64链接库安装以下组件:

          Devel下的make、mingw64-x86_64-binutils、mingw64-x86_64-gcc-core、mingw64-x86_64-gcc-g++、mingw64-x86_64-win-iconv

     cygwin的安装过程详见https://jingyan.baidu.com/article/9c69d48f9ecb0613c8024e5d.html。

3、下载libxls(1.4.0版本)源码:http://sourceforge.net/projects/libxls/ ,

      然后把libxls源码放到cygwin的/home/Administrator目录中。

4、打开cygwin(默认当前路径为/home/Administrator),使用cd libxls命令将当前文件路径切换到源码所在文件夹,执行下面命令进行configure配置:

      32位:   CC='i686-w64-mingw32-gcc' ./configure --host=i686-w64-mingw32 --build=i686-w64-mingw32

      64:   CC='x86_64-w64-mingw32-gcc' ./configure --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32

5、前面步骤正确的话,步骤4中的配置就会成功并生成必须的makefile文件,执行“make && make install”来进行编译安装了。

6、只要make没报错,我们就能在$(cygwin_home)/usr/local/libxls下即可看到安装成果($(cygwin_home)是指cygwin的安装目录)。

      安装成果中的bin目录只有xls2csv.exe,但是没法成功运行,原因就如提示一样:缺少iconv.dll。

      x86:拷贝\usr\i686-w64-mingw32\sys-root\mingw\bin下的iconv.dll

      x64:拷贝\usr\x86_64-w64-mingw32\sys-root\mingw\bin下的iconv.dll即可正常运行。

      安装成果中的lib目录只有libxlsreader.a和libxlsreader.la,并没有我们需要的dll和lib文件。不过可以利用.a文件最终转换出运行需要的dll、链接需要的lib及def文件。

7、接下来我们利用安装成果中的libxlsreader.a来生成我们需要的dll、lib和def文件。

   (1)x86:在cygwin命令行下执行“i686-w64-mingw32-ar x libxlsreader.a”提取a中的.o文件

             x64:在cygwin命令行下执行“x86_64-w64-mingw32-ar x libxlsreader.a”提取a中的.o文件

   (2)然后利用.o文件来生成dll和def文件,具体命令如下:

              x86i686-w64-mingw32-gcc -shared -o libxls.dll *.o -Wl,--export-all-symbols,--output-def,libxls.def -liconv

              x64x86_64-w64-mingw32-gcc -shared -o libxls.dll *.o -Wl,--export-all-symbols,--output-def,libxls.def -liconv

   (3)利用dll和def通过visual studio的lib来得到链接需要的lib文件,打开visual studio 命令提示,然后切换目录到dl所在目录并执行:

              x86lib /machine:X86 /def:libxls.def

              x64lib /machine:X64 /def:libxls.def

8、至此大功告成,我们得到了x86和x64两个版本的libxls链接库(dll&lib),而且中文也能正常支持。接下来我们就可以愉快地封装和使用libxls库了~生气生气生气


PS:因为在vc中使用的时候会出现编译的问题,修改xlstypes.h最终文件如下(主要是因为linux和windows的差异):

#ifndef XLS_TYPES_INC#define XLS_TYPES_INC#include <stdint.h>typedef unsigned char        BYTE;typedef uint16_t            WORD;typedef uint32_t            DWORD;#ifdef NO_ALIGNtypedef uint16_t            WORD_UA;typedef uint32_t            DWORD_UA;#else#ifdef _WIN32typedef __declspec(align(1)) uint16_t WORD_UA;typedef __declspec(align(1)) uint32_t DWORD_UA;#elsetypedef uint16_t            WORD_UA        __attribute__ ((aligned (1)));    // 2 bytestypedef uint32_t            DWORD_UA    __attribute__ ((aligned (1)));    // 4 bytes#endif    /* _WIN32 */#endif    /* NO_ALIGN */#endif    /* XLS_TYPES_INC*/</pre>


本文在 http://www.cnblogs.com/superbi/p/5482516.html 的基础上整理完善,再此感谢淡然大神的无私奉献。