Я пытаюсь скомпилировать библиотеку 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)
Я не уверен, что изменить, чтобы заставить его работать. Есть идеи?
Я сгенерировал файлы carve-1.4 vcxproj, используя CMAKE 3.0.2 с генератором VS 12 2013.
Я использую 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
Заранее благодарю за любую помощь.
Проблема в том, что cbrt определяется здесь как
inline double cbrt(double x)
и в математике как
_CRTIMP double __cdecl cbrt(_In_ double _X);
Определения должны соответствовать, но, к сожалению, это по-прежнему проблема.
В качестве обходного пути вы можете либо починить библиотеку самостоятельно, либо сделать как описано в пункте 1 этого ответа.