现在我正在为Win64应用程序构建一个C库libcurl。该建筑看起来很成功,并且已生成libcurl.lib。但是在将libcurl链接到应用程序时,会出现以下错误:
20>MSVCRTD.lib(MSVCR110D.dll) : error LNK2005: calloc already defined in MabMem.lib(malloc.obj)
20>MSVCRTD.lib(MSVCR110D.dll) : error LNK2005: free already defined in MabMem.lib(malloc.obj)
20>MSVCRTD.lib(MSVCR110D.dll) : error LNK2005: malloc already defined in MabMem.lib(malloc.obj)
20>MSVCRTD.lib(MSVCR110D.dll) : error LNK2005: realloc already defined in MabMem.lib(malloc.obj)
我认为原因是libcurl从stdlib调用这些函数,但是现有项目已经定义了自己的方法,这会导致冲突。在Win32上,看起来这种问题可以通过将编译选项设置为/ Gv来解决,它可以在函数名称的开头添加“_”以使“malloc”“_malloc”避免这种冲突。但MSDN声明在x64上,__ cdecl通常被忽略。实际上我已经尝试了每个调用约定选项来构建libcurl,但是每次使用objdump来观察libcurl.lib时,都没有_malloc但只有malloc,这意味着没有任何约定。
那么如何在x64构建上启用这种调用约定?或者也许有其他解决方案?我不想修改MabMem库,当然我也无法修改stdlib.h ....
Edit1:使其更准确一些。因为我对MSVC了解不多,也许这会有所帮助。我的目标是为win64构建libcurl,我找到了win32的现有内置库,但是我没有vcproj文件,也不知道它的配置。现有的win32库文件,当使用objdump来观察它时,我发现malloc已经被导入为_malloc,这可以避免与其他库的冲突。但是,由我设置的win64项目只生成带有malloc导入的malloc的lib文件。我实际上试图找到如何在WIN64上构建一个库,它将malloc导入为_malloc。