重新定义strdup \ Function已经有一个Body

时间:2016-03-29 20:06:46

标签: c++ linker strdup

我正在开发一个小项目,试图让Source Engine 2013代码在Qt Creator IDE下运行。我的最终目标是将其变成一个CMake项目,抛弃Valve有限的VPC系统,虽然我还不确切知道它是如何工作的,所以我采取了简单的步骤。

我曾经在MSVC ++ 2013编译器下进行编译,因此我使用的是什么,而且我最后一期遇到过这个问题,我不知道知道如何处理。我首先要做的是,如果它没有在其预期的编译器下编译,我显然做错了,我不应该修改代码。 / p>

Valve有这个memoverride.cpp,它有一个char * __ cdecl _strdup(const char * string),如果我把它注释掉,代码编译就好了,所以这是我处理的最后一个问题。

从此功能"覆盖"我收到以下两个错误:

C2084:function' char MemAlloc_StrDup(const char )已经有一个正文

C2732:链接规范与早期的规范相矛盾的是MemAlloc_StrDup'

有没有人知道任何必要的编译器选项,应该排除的一些默认库,还是我应该使用的预处理器定义来解决这个问题?我尝试在Visual Studio中编译代码,并禁用了被禁止的启动横幅,这样我就可以看到它传递的所有选项,但我尝试了所有选项,但它似乎没有任何区别。

所以有人有想法吗?

非常感谢任何信息,谢谢!

1 个答案:

答案 0 :(得分:0)

您对MemAlloc_StrDup / strdup重复定义的问题可能是由于您不能有strdup的两个定义。没有MSVC ++编译器选项可以解决这个问题。

它可能在其他编译器上“工作”,因为One Definition Rule不要求编译器退出致命错误消息,甚至不发出警告。但MSVC ++完全有权拒绝这一点。

MSVC ++允许您不链接其标准库。这不太可能解决您的问题,因为它是一个全有或全无的选择。