dll - mingw/msys2 构建并链接到没有版本号的 dll
问题描述
我正在使用 mingw/msys2 构建 pjsip,它会在它们之后(.dll.2 文件)以及 .dll 文件继续使用 .2 构建 dll。如果我删除已构建的 .dll.2 文件并尝试构建我的程序,我的程序仍将链接到 .dll.2 版本并抱怨它们不存在。
我运行以构建 pjsip 的命令:
./configure CFLAGS="${MAKEFLAGS}" CXXFLAGS="${MAKEFLAGS}" \
--build=${MINGW_CHOST} \
--host=${MINGW_CHOST} \
--target=${MINGW_CHOST} \
--prefix="${OUT_PREFIX}" \
--disable-openh264 \
--disable-v4l2 \
--disable-ffmpeg \
--enable-libsamplerate \
--disable-video \
--enable-shared \
--disable-static \
--disable-libyuv \
--with-external-speex \
--with-gnutls
我可以在构建输出中看到它构建 dll.2 然后链接它们
ln -sf libpjsua2.dll.2 ../lib/libpjsua2.dll
如何使我的程序仅依赖于 .dll 而不是 .dll.2?
解决方案
您将不得不(grep
也许)浏览 Makefile.am 文件,找到 libpjsua2 的规则,并对其进行修改以删除 .2“扩展名”。我的猜测是 lib 扩展名和整数“扩展名”不会被硬编码,所以只需搜索 libpjsua2。此时您也可以移除该ln -sf
位。您对任何文件所做的任何更改都应保存到diff
源/构建目录之外的副本(或者,您可以),以便在您再次下载并解压缩源时可以重新应用更改。
您遇到此问题的原因是,在链接时,符号链接被解析并使用库的实际名称。再多的删除库也不会改变这一点。仅根据您提供的信息,您似乎可能误解了实际构建的内容:libpjsua2.dll 本身并不是一个库,而是指向 libpjsua2.dll.2 的链接。当您删除 libpjsua2.dll.2 时,您正在删除实际的库,libpjsua2.dll 没有指向任何地方,最终会出现“未找到”错误。
推荐阅读
- r - 等价于 R 中用于蒙特卡罗模拟的 Stata 命令“模拟”
- tfs - 在 azure devops 中成功完成发布后如何触发构建?
- android - android ConstraintLayout Flow:从右到左对齐项目
- android - How to go to a position with view pager 2 that uses paging 3 to load data?
- python - 在列表中的数据框中查找日期,按 ID 分组
- javascript - 如何使用下面的 HTML 结构创建悬停时出现的叠加层?
- python - 展平 json 对象
- python - Glob没有获取文件?
- c# - 将 SSL 证书与 Fleck Websockets 一起使用
- reactjs - 计数器编号不变(React JS)