0

我正在尝试将libMcrypt用作 Windows 的静态库。我的代码已经在使用此处找到的 dll 端口。该项目不存在“vcproj/解决方案”,所以我不知道如何使用 Visual Studio 直接编译它。(当我尝试创建一个并编译时,我遇到了很多错误)

但是,我可以使用 MingW 进行交叉编译并获得一个运行良好的 windows dll。我在这里找到了说明。然后我编译了一个静态库,将 --enable=static 作为配置选项。它成功创建了一个 .a 和 .la 文件。

但是当我尝试使用编译库时,我的项目中出现以下链接器错误

libmcrypt.lib(loki97.o) : warning LNK4229: invalid directive '/aligncomm:_prm,5' encountered; ignored
libmcrypt.lib(loki97.o) : warning LNK4229: invalid directive '/aligncomm:_sb2,5' encountered; ignored
libmcrypt.lib(loki97.o) : warning LNK4229: invalid directive '/aligncomm:_sb1,5' encountered; ignored
LIBCMT.lib(invarg.obj) : error LNK2005: __invoke_watson already defined in MSVCRT.lib(MSVCR100.dll)
MSVCRT.lib(MSVCR100.dll) : error LNK2005: __strdup already defined in LIBCMT.lib(strdup.obj)
     Creating library ..\..\..\bin\myProj.lib and object ..\..\..\bin\myProj.exp
LINK : warning LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs; use /NODEFAULTLIB:library
libmcrypt.lib(blowfish-compat.o) : error LNK2001: unresolved external symbol ___chkstk_ms
myProj.exp : error LNK2001: unresolved external symbol arcfour_LTX__is_block_algorithm
myProj.exp : error LNK2001: unresolved external symbol arcfour_LTX__mcrypt_algorithm_version
myProj.exp : error LNK2001: unresolved external symbol arcfour_LTX__mcrypt_decrypt
myProj.exp : error LNK2001: unresolved external symbol arcfour_LTX__mcrypt_encrypt
myProj.exp : error LNK2001: unresolved external symbol arcfour_LTX__mcrypt_get_algo_iv_size
myProj.exp : error LNK2001: unresolved external symbol arcfour_LTX__mcrypt_get_algorithms_name
myProj.exp : error LNK2001: unresolved external symbol arcfour_LTX__mcrypt_get_block_size
  1. 从第一个两个错误,我觉得这是一个 CRT 不匹配错误。如何让 gcc 选择在没有 CRT 的情况下构建静态库?(我不确定我的想法是否正确)
  2. 或者我可以使用 .a 文件,提取 obj 文件并从中重新创建一个库吗?
  3. 有没有人在 Windows 上为 libMcrypt 编译静态库

非常感谢你的帮助!

4

0 回答 0