首页 > 解决方案 > 我试图通过 MSYS2 为 Windows 构建 Libxls 静态库和动态库,但它不起作用

问题描述

我试图通过 MSYS2 为 Windows 构建一个静态库和动态库 Libxls,但它不起作用

https://github.com/libxls/libxls

我的 MSYS2 环境具有 gcc g++ libiconv 等所需的一切 我也阅读了安装文档和自述文件,它对我不起作用,但我刚刚找到了对我有帮助的博客,我尝试了以下步骤

#1

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

#2

 make & make install

这里一切正常,还没有错误,我看到生成了 libxlsreader.dll.a、libxlsreader.la、libxlsreader.lai、libxlsreader-8.dll 然后我尝试了第 3 步

#3

ar x libxlsreader.dll.a

通过这一步,我看到生成了 .o 文件,然后我尝试构建一个 dll 文件和 def 文件

#4

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

之后它生成了 libxls.dll,它是 94k,并且只有 2 个函数,它们是

_nm__brdb @1 DATA
_nm__xls_debug @2 DATA

这些不是我的意外,因为它应该生成一个文件,其中包含一堆消耗 libxlsreader-8.dll 的函数,我在这里上传了文件,结果文件在 .libs 文件夹中

https://drive.google.com/file/d/1zRyursEi3fECVkso-BPOagKa6u60BtDp/view?usp=sharing

知道我做错了什么吗?非常感谢

标签: linkermingwstatic-librariesmingw32msys2

解决方案


这似乎不是构建像 libxls 这样的库的正确方法。您应该真正运行该./configure脚本,该脚本会生成Makefile构建正确库所需的所有内容,包括在 DLL 中正确导出符号所需的内容。

以下是我使用 MinGW-w64 从 MSYS2 shell 执行此操作的方法:

# install location (change as needed)
INSTALLPREFIX=/usr/local
wget https://github.com/libxls/libxls/releases/download/v1.6.1/libxls-1.6.1.tar.gz
tar xfz libxls-1.6.1.tar.gz
cd libxls-1.6.1
./configure --prefix=$INSTALLPREFIX --enable-static --enable-shared &&
 make install-strip &&
 echo SUCCESS

推荐阅读