【问题标题】:mingw/msys2 build and link to dll without version numbermingw/msys2 构建并链接到没有版本号的 dll
【发布时间】:2019-08-01 16:24:25
【问题描述】:

我正在使用 mingw/msys2 构建 pjsip,并且它会继续使用 .2 构建 dll(.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?

【问题讨论】:

    标签: dll mingw msys2


    【解决方案1】:

    你将不得不去(grep,也许)通过 Makefile.am 文件,找到 libpjsua2 的规则,并修改它以删除 .2“扩展名”。我的猜测是 lib 扩展名和整数“扩展名”不会被硬编码,所以只需搜索 libpjsua2。此时您还可以删除ln -sf 位。您对任何文件所做的任何更改都应保存到源/构建目录之外的副本(或者,您可以diff),以便在您再次下载并解压缩源时可以重新应用更改。

    您遇到此问题的原因是,在链接时,符号链接被解析并使用了库的 实际 名称。没有多少删除库会改变这一点。仅基于您提供的信息,您似乎可能误解了实际构建的内容:libpjsua2.dll 本身不是一个库,而是一个指向 libpjsua2.dll.2 的链接。当你删除 libpjsua2.dll.2 时,你删除的是实际的库,libpjsua2.dll 没有指向任何地方,最终会出现“未找到”错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-29
      • 1970-01-01
      • 1970-01-01
      • 2022-11-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多