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文件,具体命令如下:
x86:i686-w64-mingw32-gcc -shared -o libxls.dll *.o -Wl,--export-all-symbols,--output-def,libxls.def -liconv
x64:x86_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所在目录并执行:
x86:lib /machine:X86 /def:libxls.def
x64:lib /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 的基础上整理完善,再此感谢淡然大神的无私奉献。
- Windows下编译libxls32位和64位链接库
- windows 下boost 64 位和32位库的编译编译
- 64位ubuntu下编译32位汇编程序(同时链接C库)
- GDAL---Windows下32位与64位编译
- Windows下编译 32位和64位 OpenSSL 2016-04-12
- Boost在Linux和windows下的编译 32位 64位
- Windows 64位下 PostgreSQL的编译
- 【FFmpeg】Windows下64位ffmpeg编译
- Windows下64位ffmpeg编译
- Windows下编译安装64位Nginx
- 在windows上编译32位和64位mono
- libtiff库在windows下的编译(32位与64位)
- openssl windows编译 32位&64位
- openssl windows编译 32位&64位
- openssl windows编译 32位&64位
- [转]Windows10 VS2015下分别编译libevent 32位和64位库
- Libevnt 在Windows10 VS2015下分别编译32位和64位库
- 64位系统下编译32位库
- Error in invoking target 'client_sharedlib' of makefile '/crm/bip/Oracle_BI1/rdbms/lib/ins_rdbms.mk'
- Zabbix使用微信发送告警
- VC++实现按钮控件的底色、字体、颜色。亲测可用
- android 动画animation setRepeatCount不起作用
- JavaScript中的小技巧和注意点(二)
- Windows下编译libxls32位和64位链接库
- day04_元素案例
- SAA3010T红外解码
- 设置Tomcat的UTF-8编码
- js面试题
- js 各种事件 如:点击事件、失去焦点、键盘事件等
- 进程的状态转换、进程间通信的方式
- SSM 框架搭建
- Inception v1 —v2 —v3 —v4