linker - 我试图通过 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
知道我做错了什么吗?非常感谢
解决方案
这似乎不是构建像 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
推荐阅读
- blazor - 在同一方法调用中使其可见时如何聚焦元素?
- firebase - Flutter - 如何在 Firebase Firestore 上以正确格式存储长值?
- beautifulsoup - BeautifulSoup 从一个类中提取多个元素
- laravel - 尝试验证输入 laravel+vuejs 时方法 \UserController::sendError 不存在
- variables - 通过调用不同模块中的函数(带有按钮)为变量赋值
- javascript - 我在从 NestJS 上已导入的模块导入服务时遇到问题
- python - 在 ElementTree 中使用 XPath 查找嵌套元素
- python - 如何在 Django 中使用 post 方法处理表单?
- firebase - 将当前图像的 url 上传到 firestore 数据库时出现问题
- python - Unscented Kalman 滤波器中的负协方差矩阵