1

我正在尝试编译 Carve 1.4 c++ 库。但不断得到

C2375: 'cbrt' : redefinition; different linkage 

错误。

当我单击错误时,它会将我带到 math.h 中的这一行:

_CRTIMP double __cdecl cbrt(_In_ double _X);

我能找到的唯一其他 cbrt 函数与名为 cbrt.h 的库附带的头文件中的这一行有关:

inline double cbrt(double x)

我不确定要更改什么才能使其正常工作。有任何想法吗?

我已经使用 CMAKE 3.0.2 和 VS 12 2013 生成器生成了 carve-1.4 vcxproj 文件。

我正在使用 boost 1.56、CMAKE 3.0.2、VS 12 2013、Windows 7。

使用 CMAKE,对于 Carve 1.4,我关闭了“build_shared_libs”,并添加了“cmake_static_linker_flags”以与“cmake_exe_linker_flags”相同......

CMAKE_STATIC_LINKER_FLAGS                /machine:X86 

CMAKE_STATIC_LINKER_FLAGS_DEBUG          /debug /INCREMENTAL

CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL     /INCREMENTAL:NO

CMAKE_STATIC_LINKER_FLAGS_RELEASE        /INCREMENTAL:NO

CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO /debug /INCREMENTAL

提前感谢您的帮助。

4

1 回答 1

0

问题是 cbrt在这里定义

inline double cbrt(double x)

在 math.h 中作为

_CRTIMP double __cdecl cbrt(_In_ double _X);

定义必须匹配,但不幸的是,这仍然是一个长期存在的问题

作为一种解决方法,您可以自己修复库,也可以按照本答案的第 1 点所述进行操作。

于 2014-11-03T18:12:16.560 回答