slembcke/Chipmunk2D

MSVC+CMake: unresolved external symbol cpHastySpaceNew

oprypin opened this issue · 2 comments

Hi.
I built Chipmunk from source using CMake + MSVC 2019.
Then, when using MSVC command line to link any program that uses cpHastySpace, I get the error

test.obj : error LNK2019: unresolved external symbol cpHastySpaceNew referenced in function main
test.exe : fatal error LNK1120: 1 unresolved externals

cpSpaceNew works, though.

Full CMD session to reproduce the issue:

c:\code\chipmunk2d>git rev-parse HEAD
1d01b2a40be3990f7b79f575b7ff35f3c62042e3

c:\code\chipmunk2d>git status
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean

c:\code\chipmunk2d>cmake --version
cmake version 3.17.2

CMake suite maintained and supported by Kitware (kitware.com/cmake).

c:\code\chipmunk2d>cmake . -DBUILD_DEMOS=OFF
-- Building for: Visual Studio 16 2019
-- Selecting Windows SDK version 10.0.18362.0 to target Windows 10.0.18363.
-- The C compiler identification is MSVC 19.25.28614.0
-- The CXX compiler identification is MSVC 19.25.28614.0
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.25.28610/bin/Hostx64/x64/cl.exe
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.25.28610/bin/Hostx64/x64/cl.exe - works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.25.28610/bin/Hostx64/x64/cl.exe
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.25.28610/bin/Hostx64/x64/cl.exe - works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
Configuring Chipmunk2D version 7.0.3
-- Configuring done
-- Generating done
-- Build files have been written to: C:/code/chipmunk2d

c:\code\chipmunk2d>cmake --build . --config Release
Microsoft (R) Build Engine version 16.5.0+d4cbfca49 for .NET Framework
Copyright (C) Microsoft Corporation. All rights reserved.

  Checking Build System
  Building Custom Rule C:/code/chipmunk2d/src/CMakeLists.txt
  chipmunk.c
  cpArbiter.c
  cpArray.c
  cpBBTree.c
  cpBody.c
  cpCollision.c
  cpConstraint.c
  cpDampedRotarySpring.c
  cpDampedSpring.c
  cpGearJoint.c
  cpGrooveJoint.c
  cpHashSet.c
  cpHastySpace.c
  cpMarch.c
  cpPinJoint.c
  cpPivotJoint.c
  cpPolyShape.c
  cpPolyline.c
C:\code\chipmunk2d\include\chipmunk/cpPolyline.h(9,17): warning C4200: nonstandard extension used: zero-sized array in
struct/union [C:\code\chipmunk2d\src\chipmunk.vcxproj]
C:\code\chipmunk2d\include\chipmunk/cpPolyline.h(9,17): message : This member will be ignored by a defaulted constructo
r or copy/move assignment operator [C:\code\chipmunk2d\src\chipmunk.vcxproj]
  cpRatchetJoint.c
  cpRobust.c
  Generating Code...
  Compiling...
  cpRotaryLimitJoint.c
  cpShape.c
  cpSimpleMotor.c
  cpSlideJoint.c
  cpSpace.c
  cpSpaceComponent.c
  cpSpaceDebug.c
  cpSpaceHash.c
  cpSpaceQuery.c
  cpSpaceStep.c
  cpSpatialIndex.c
  cpSweep1D.c
  Generating Code...
     Creating library C:/code/chipmunk2d/src/Release/chipmunk.lib and object C:/code/chipmunk2d/src/Release/chipmunk.ex
  p
  chipmunk.vcxproj -> C:\code\chipmunk2d\src\Release\chipmunk.dll
  Building Custom Rule C:/code/chipmunk2d/src/CMakeLists.txt
  chipmunk.c
  cpArbiter.c
  cpArray.c
  cpBBTree.c
  cpBody.c
  cpCollision.c
  cpConstraint.c
  cpDampedRotarySpring.c
  cpDampedSpring.c
  cpGearJoint.c
  cpGrooveJoint.c
  cpHashSet.c
  cpHastySpace.c
  cpMarch.c
  cpPinJoint.c
  cpPivotJoint.c
  cpPolyShape.c
  cpPolyline.c
C:\code\chipmunk2d\include\chipmunk/cpPolyline.h(9,17): warning C4200: nonstandard extension used: zero-sized array in
struct/union [C:\code\chipmunk2d\src\chipmunk_static.vcxproj]
C:\code\chipmunk2d\include\chipmunk/cpPolyline.h(9,17): message : This member will be ignored by a defaulted constructo
r or copy/move assignment operator [C:\code\chipmunk2d\src\chipmunk_static.vcxproj]
  cpRatchetJoint.c
  cpRobust.c
  Generating Code...
  Compiling...
  cpRotaryLimitJoint.c
  cpShape.c
  cpSimpleMotor.c
  cpSlideJoint.c
  cpSpace.c
  cpSpaceComponent.c
  cpSpaceDebug.c
  cpSpaceHash.c
  cpSpaceQuery.c
  cpSpaceStep.c
  cpSpatialIndex.c
  cpSweep1D.c
  Generating Code...
  chipmunk_static.vcxproj -> C:\code\chipmunk2d\src\Release\chipmunk.lib
  Building Custom Rule C:/code/chipmunk2d/CMakeLists.txt

c:\code\chipmunk2d>set INCLUDE=%INCLUDE%;c:\code\chipmunk2d\include

c:\code\chipmunk2d>set LIB=%LIB%;c:\code\chipmunk2d\src\Release

c:\code\chipmunk2d>type test.c
#include <chipmunk/chipmunk.h>

int main() {
    cpHastySpaceNew();
    return 0;
}

c:\code\chipmunk2d>cl /MD chipmunk.lib msvcrt.lib test.c
Microsoft (R) C/C++ Optimizing Compiler Version 19.25.28614 for x64
Copyright (C) Microsoft Corporation.  All rights reserved.

test.c
Microsoft (R) Incremental Linker Version 14.25.28614.0
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:test.exe
chipmunk.lib
msvcrt.lib
test.obj
test.obj : error LNK2019: unresolved external symbol cpHastySpaceNew referenced in function main
test.exe : fatal error LNK1120: 1 unresolved externals

Using cpSpaceNew instead works, though:

c:\code\chipmunk2d>type test.c
#include <chipmunk/chipmunk.h>

int main() {
    cpSpaceNew();
    return 0;
}

c:\code\chipmunk2d>cl /MD chipmunk.lib msvcrt.lib test.c
Microsoft (R) C/C++ Optimizing Compiler Version 19.25.28614 for x64
Copyright (C) Microsoft Corporation.  All rights reserved.

test.c
Microsoft (R) Incremental Linker Version 14.25.28614.0
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:test.exe
chipmunk.lib
msvcrt.lib
test.obj
   Creating library test.lib and object test.exp
Excerpt of dumpbin /all src\Release\chipmunk.lib
Microsoft (R) COFF/PE Dumper Version 14.25.28614.0
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file src\Release\chipmunk.lib

File Type: LIBRARY

Archive member name at 8: /               
5EBA4AE5 time/date Tue May 12 00:06:13 2020
         uid
         gid
       0 mode
    5516 size
correct header end

    587 public symbols

     AC58 cpSweep1DAlloc
     AC58 cpSweep1DInit
     AC58 cpSweep1DNew
     D6C8 ??_C@_0BL@EGJNDNNH@?$CBstaticIndex?9?$DOdynamicIndex@
     D6C8 ??_C@_0CI@GLNIAIPJ@C?3?2code?2chipmunk2d?2src?2cpSpatia@
     D6C8 ??_C@_0DO@DNEKNPIK@This?5static?5index?5is?5already?5as@
     D6C8 ?cpSpatialIndexInit@@YAPEAUcpSpatialIndex@@PEAU1@PEAUcpSpatialIndexClass@@P6A?AUcpBB@@PEAX@Z0@Z
     D6C8 cpSpatialIndexCollideStatic
     D6C8 cpSpatialIndexFree
     E630 ??_C@_0CF@EMHBPMMF@C?3?2code?2chipmunk2d?2src?2cpSpaceS@
     E630 ??_C@_0CF@PCDGAGKE@count?5?$DM?$DN?5CP_MAX_CONTACTS_PER_AR@
     E630 ??_C@_0CJ@LHFEOHIA@Internal?5Error?3?5Contact?5buffer?5@
     E630 ?cpContactBufferGetArray@@YAPEAUcpContact@@PEAUcpSpace@@@Z
     E630 ?cpShapeUpdateFunc@@YAXPEAUcpShape@@PEAX@Z
     E630 ?cpSpaceArbiterSetFilter@@YAEPEAUcpArbiter@@PEAUcpSpace@@@Z
     E630 ?cpSpaceCollideShapes@@YAIPEAUcpShape@@0IPEAUcpSpace@@@Z
     E630 ?cpSpaceGetPostStepCallback@@YAPEAUcpPostStepCallback@@PEAUcpSpace@@PEAX@Z
     E630 ?cpSpaceLock@@YAXPEAUcpSpace@@@Z
     E630 ?cpSpacePushContacts@@YAXPEAUcpSpace@@H@Z
     E630 ?cpSpacePushFreshContactBuffer@@YAXPEAUcpSpace@@@Z
     E630 ?cpSpaceUnlock@@YAXPEAUcpSpace@@E@Z
     E630 __real@3ff0000000000000
     E630 __real@7ff0000000000000
     E630 cpSpaceAddPostStepCallback
     E630 cpSpaceStep
    12C38 cpSpaceBBQuery
    12C38 cpSpacePointQuery
    12C38 cpSpacePointQueryNearest
    12C38 cpSpaceSegmentQuery
    12C38 cpSpaceSegmentQueryFirst
    12C38 cpSpaceShapeQuery
    15954 ??_C@_05IOMEMJEC@count@
    15954 ??_C@_09KDPIDABE@primes?$FLi?$FN@
    15954 ??_C@_0BP@FMNHNCPI@C?3?2code?2chipmunk2d?2src?2prime?4h@
    15954 ??_C@_0CF@LOLKIL@C?3?2code?2chipmunk2d?2src?2cpSpaceH@
    15954 ??_C@_0CK@FCLIKEDG@Internal?5Error?3?5Buffer?5size?5is?5@
    15954 ??_C@_0ED@FMLMCGNO@Tried?5to?5resize?5a?5hash?5table?5to@
    15954 __xmm@7fffffffffffffff7fffffffffffffff
    15954 cpSpaceHashAlloc
    15954 cpSpaceHashInit
    15954 cpSpaceHashNew
    15954 cpSpaceHashResize
    1BEC6 __real@4014000000000000
    1BEC6 __real@c000000000000000
    1BEC6 __xmm@80000000000000008000000000000000
    1BEC6 cpSpaceDebugDraw
    1E0F2 ??_C@_0BI@EDKJPELK@?$CBcpSpaceIsLocked?$CIspace?$CJ@
    1E0F2 ??_C@_0CJ@HCKIOHIO@group?5?$DN?$DN?5NULL?5?$HM?$HM?5cpBodyIsSleepi@
    1E0F2 ??_C@_0CK@BECHLCGO@C?3?2code?2chipmunk2d?2src?2cpSpaceC@
    1E0F2 ??_C@_0CL@FKKEDIOD@cpBodyGetType?$CIbody?$CJ?5?$DN?$DN?5CP_BODY_@
    1E0F2 ??_C@_0CL@KGCKBAFO@Non?9dynamic?5bodies?5cannot?5be?5pu@
    1E0F2 ??_C@_0CM@COAHOKGI@cpBodyGetType?$CIbody?$CJ?5?$DN?$DN?5CP_BODY_@
    1E0F2 ??_C@_0CM@LLBEBIDO@ComponentRoot?$CIbody?$CJ?5?$DN?$DN?5Componen@
    1E0F2 ??_C@_0CP@CLPGCHBN@cpSpaceGetSleepTimeThreshold?$CIsp@
    1E0F2 ??_C@_0DE@NOMNIIPL@cpBodyActivateStatic?$CI?$CJ?5called?5o@
    1E0F2 ??_C@_0DG@EKNHMOBA@Cannot?5use?5a?5non?9sleeping?5body?5@
    1E0F2 ??_C@_0DL@FBLPFJGM@Internal?5error?3?5Attempting?5to?5a@
    1E0F2 ??_C@_0DN@IHJIAMHE@Internal?5error?3?5Attempting?5to?5d@
    1E0F2 ??_C@_0EC@IKHKONPO@The?5body?5is?5already?5sleeping?5an@
    1E0F2 ??_C@_0HD@CGNLOBHG@Sleeping?5is?5not?5enabled?5on?5the?5@
    1E0F2 ??_C@_0HE@BKCCEHCA@Bodies?5cannot?5be?5put?5to?5sleep?5d@
    1E0F2 ?cpSpaceActivateBody@@YAXPEAUcpSpace@@PEAUcpBody@@@Z
    1E0F2 ?cpSpaceProcessComponents@@YAXPEAUcpSpace@@N@Z
    1E0F2 cpBodyActivate
    1E0F2 cpBodyActivateStatic
    1E0F2 cpBodySleep
    1E0F2 cpBodySleepWithGroup
    2386C ??_C@_0BD@IOPHONEI@?$CBconstraint?9?$DOspace@
    2386C ??_C@_0BF@MKKGGBFD@body?9?$DOspace?5?$CB?$DN?5space@
    2386C ??_C@_0BG@OBGLBDKL@shape?9?$DOspace?5?$CB?$DN?5space@
    2386C ??_C@_0BH@NNDOJLDK@a?5?$CB?$DN?5NULL?5?$CG?$CG?5b?5?$CB?$DN?5NULL@
    2386C ??_C@_0BK@GNNKPNLH@Damping?5must?5be?5positive?4@
    2386C ??_C@_0BL@PLLLJEOK@constraint?9?$DOspace?5?$CB?$DN?5space@
    2386C ??_C@_0BM@GDCJKHHE@shape?9?$DObody?9?$DOspace?5?$DN?$DN?5space@
    2386C ??_C@_0CB@KEHKANAJ@cpSpaceContainsBody?$CIspace?0?5body@
    2386C ??_C@_0CB@OIGIOPAE@The?5shape?8s?5body?5is?5not?5defined@
    2386C ??_C@_0CB@PBEIHBPB@C?3?2code?2chipmunk2d?2src?2cpSpace?4@
    2386C ??_C@_0CD@FHNHEDMP@cpSpaceContainsShape?$CIspace?0?5sha@
    2386C ??_C@_0CE@PEHIOFNI@body?5?$CB?$DN?5cpSpaceGetStaticBody?$CIsp@
    2386C ??_C@_0CF@EIJALBAI@space?9?$DOstaticBody?9?$DOshapeList?5?$DN?$DN@
    2386C ??_C@_0CH@GGOPBMFG@Constraint?5is?5attached?5to?5a?5NUL@
    2386C ??_C@_0CK@ELACCAP@Iterations?5must?5be?5positive?5and@
    2386C ??_C@_0CN@PEMGPPM@cpSpaceContainsConstraint?$CIspace@
    2386C ??_C@_0DI@ECEJJBHA@Cannot?5remove?5the?5designated?5st@
    2386C ??_C@_0DO@FFJDFNCG@The?5shape?8s?5body?5must?5be?5added?5@
    2386C ??_C@_0EN@NNFAOAPH@Cannot?5remove?5a?5body?5that?5was?5n@
    2386C ??_C@_0EO@BLMNFCFH@Cannot?5remove?5a?5shape?5that?5was?5@
    2386C ??_C@_0FC@CNGJECNK@You?5have?5already?5added?5this?5bod@
    2386C ??_C@_0FD@IAKCIANN@You?5have?5already?5added?5this?5bod@
    2386C ??_C@_0FD@KJHPDPHB@You?5have?5already?5added?5this?5sha@
    2386C ??_C@_0FD@NADMMLBD@Cannot?5remove?5a?5constraint?5that@
    2386C ??_C@_0FE@MBCCOMMA@You?5have?5already?5added?5this?5sha@
    2386C ??_C@_0FI@LFCBBDHC@You?5have?5already?5added?5this?5con@
    2386C ??_C@_0FJ@FIDHODFG@You?5have?5already?5added?5this?5con@
    2386C ??_C@_0GB@CGIDHOBI@Internal?5Error?3?5Changing?5the?5de@
    2386C ??_C@_0HB@KNILAFHG@You?5cannot?5manually?5reindex?5obj@
    2386C ??_C@_0IC@IJAFECOI@This?5operation?5cannot?5be?5done?5s@
    2386C ??_C@_0M@MKOKEDBH@shape?9?$DObody@
    2386C ??_C@_0N@CCOACGDF@?$CBbody?9?$DOspace@
    2386C ??_C@_0O@BJGCFBHE@?$CBshape?9?$DOspace@
    2386C ??_C@_0P@CFCNNLJG@damping?5?$DO?$DN?50?40@
    2386C ??_C@_0P@FDJCIJEM@?$CBspace?9?$DOlocked@
    2386C ??_C@_0P@MDPMJFEM@iterations?5?$DO?50@
    2386C ?cpCollisionHandlerDoNothing@@3UcpCollisionHandler@@A
    2386C ?cpSpaceFilterArbiters@@YAXPEAUcpSpace@@PEAUcpBody@@PEAUcpShape@@@Z
    2386C ?cpSpaceSetStaticBody@@YAXPEAUcpSpace@@PEAUcpBody@@@Z
    2386C __real@3fecccccc0000000
    2386C __real@404e000000000000
    2386C cpSpaceAddBody
    2386C cpSpaceAddCollisionHandler
    2386C cpSpaceAddConstraint
    2386C cpSpaceAddDefaultCollisionHandler
    2386C cpSpaceAddShape
    2386C cpSpaceAddWildcardHandler
    2386C cpSpaceAlloc
    2386C cpSpaceContainsBody
    2386C cpSpaceContainsConstraint
    2386C cpSpaceContainsShape
    2386C cpSpaceDestroy
    2386C cpSpaceEachBody
    2386C cpSpaceEachConstraint
    2386C cpSpaceEachShape
    2386C cpSpaceFree
    2386C cpSpaceGetCollisionBias
    2386C cpSpaceGetCollisionPersistence
    2386C cpSpaceGetCollisionSlop
    2386C cpSpaceGetCurrentTimeStep
    2386C cpSpaceGetDamping
    2386C cpSpaceGetGravity
    2386C cpSpaceGetIdleSpeedThreshold
    2386C cpSpaceGetIterations
    2386C cpSpaceGetSleepTimeThreshold
    2386C cpSpaceGetStaticBody
    2386C cpSpaceGetUserData
    2386C cpSpaceInit
    2386C cpSpaceIsLocked
    2386C cpSpaceNew
    2386C cpSpaceReindexShape
    2386C cpSpaceReindexShapesForBody
    2386C cpSpaceReindexStatic
    2386C cpSpaceRemoveBody
    2386C cpSpaceRemoveConstraint
    2386C cpSpaceRemoveShape
    2386C cpSpaceSetCollisionBias
    2386C cpSpaceSetCollisionPersistence
    2386C cpSpaceSetCollisionSlop
    2386C cpSpaceSetDamping
    2386C cpSpaceSetGravity
    2386C cpSpaceSetIdleSpeedThreshold
    2386C cpSpaceSetIterations
    2386C cpSpaceSetSleepTimeThreshold
    2386C cpSpaceSetUserData
    2386C cpSpaceUseSpatialHash
    2DF32 ??_C@_0CB@DOMPGMCM@Constraint?5is?5not?5a?5slide?5joint@
    2DF32 ??_C@_0CF@GPCCBJBJ@cpConstraintIsSlideJoint?$CIconstr@
    2DF32 ??_C@_0CG@IGFCNPBP@C?3?2code?2chipmunk2d?2src?2cpSlideJ@
    2DF32 __real@0010000000000000
    2DF32 cpConstraintIsSlideJoint
    2DF32 cpSlideJointAlloc
    2DF32 cpSlideJointGetAnchorA
    2DF32 cpSlideJointGetAnchorB
    2DF32 cpSlideJointGetMax
    2DF32 cpSlideJointGetMin
    2DF32 cpSlideJointInit
    2DF32 cpSlideJointNew
    2DF32 cpSlideJointSetAnchorA
    2DF32 cpSlideJointSetAnchorB
    2DF32 cpSlideJointSetMax
    2DF32 cpSlideJointSetMin
    313CC ??_C@_0CB@GIALDHPN@Constraint?5is?5not?5a?5SimpleMotor@
    313CC ??_C@_0CG@BMPFBONL@cpConstraintIsSimpleMotor?$CIconst@
    313CC ??_C@_0CH@PGGCEHCF@C?3?2code?2chipmunk2d?2src?2cpSimple@
    313CC cpConstraintIsSimpleMotor
    313CC cpSimpleMotorAlloc
    313CC cpSimpleMotorGetRate
    313CC cpSimpleMotorInit
    313CC cpSimpleMotorNew
    313CC cpSimpleMotorSetRate
    32A38 ??_C@_0BB@JHONNNIE@friction?5?$DO?$DN?50?40f@
    32A38 ??_C@_0BD@EPEOOABE@elasticity?5?$DO?$DN?50?40f@
    32A38 ??_C@_0BG@BAPEDPDD@?$CBcpShapeActive?$CIshape?$CJ@
    32A38 ??_C@_0BK@BPFOOIMA@Friction?5must?5be?5postive?4@
    32A38 ??_C@_0BN@BGELDALA@Shape?5is?5not?5a?5circle?5shape?4@
    32A38 ??_C@_0BN@DNNMKLPM@Elasticity?5must?5be?5positive?4@
    32A38 ??_C@_0BO@JNBKPKEK@Shape?5is?5not?5a?5segment?5shape?4@
    32A38 ??_C@_0CB@ICDJEOAK@C?3?2code?2chipmunk2d?2src?2cpShape?4@
    32A38 ??_C@_0CE@HCDGOBHG@shape?9?$DOklass?5?$DN?$DN?5?$CGcpCircleShapeC@
    32A38 ??_C@_0CF@HCCPBLPC@shape?9?$DOklass?5?$DN?$DN?5?$CGcpSegmentShape@
    32A38 ??_C@_0HC@GCNFDDNA@You?5cannot?5change?5the?5body?5on?5a@
    32A38 ?cpShapeInit@@YAPEAUcpShape@@PEAU1@PEBUcpShapeClass@@PEAUcpBody@@UcpShapeMassInfo@@@Z
    32A38 __real@3ee4f8b588e368f1
    32A38 __real@3fe0000000000000
    32A38 __xmm@00000000000000007ff0000000000000
    32A38 __xmm@3ff00000000000000000000000000000
    32A38 cpCircleShapeAlloc
    32A38 cpCircleShapeGetOffset
    32A38 cpCircleShapeGetRadius
    32A38 cpCircleShapeInit
    32A38 cpCircleShapeNew
    32A38 cpCircleShapeSetOffset
    32A38 cpCircleShapeSetRadius
    32A38 cpSegmentShapeAlloc
    32A38 cpSegmentShapeGetA
    32A38 cpSegmentShapeGetB
    32A38 cpSegmentShapeGetNormal
    32A38 cpSegmentShapeGetRadius
    32A38 cpSegmentShapeInit
    32A38 cpSegmentShapeNew
    32A38 cpSegmentShapeSetEndpoints
    32A38 cpSegmentShapeSetNeighbors
    32A38 cpSegmentShapeSetRadius
    32A38 cpShapeCacheBB
    32A38 cpShapeDestroy
    32A38 cpShapeFree
    32A38 cpShapeGetArea
    32A38 cpShapeGetBB
    32A38 cpShapeGetBody
    32A38 cpShapeGetCenterOfGravity
    32A38 cpShapeGetCollisionType
    32A38 cpShapeGetDensity
    32A38 cpShapeGetElasticity
    32A38 cpShapeGetFilter
    32A38 cpShapeGetFriction
    32A38 cpShapeGetMass
    32A38 cpShapeGetMoment
    32A38 cpShapeGetSensor
    32A38 cpShapeGetSpace
    32A38 cpShapeGetSurfaceVelocity
    32A38 cpShapeGetUserData
    32A38 cpShapePointQuery
    32A38 cpShapeSegmentQuery
    32A38 cpShapeSetBody
    32A38 cpShapeSetCollisionType
    32A38 cpShapeSetDensity
    32A38 cpShapeSetElasticity
    32A38 cpShapeSetFilter
    32A38 cpShapeSetFriction
    32A38 cpShapeSetMass
    32A38 cpShapeSetSensor
    32A38 cpShapeSetSurfaceVelocity
    32A38 cpShapeSetUserData
    32A38 cpShapeUpdate
    32A38 cpShapesCollide
    3CA00 ??_C@_0CI@LKIEONLM@Constraint?5is?5not?5a?5rotary?5limi@
    3CA00 ??_C@_0CL@KOPGMJD@cpConstraintIsRotaryLimitJoint?$CI@
    3CA00 ??_C@_0CM@JPIFIFKE@C?3?2code?2chipmunk2d?2src?2cpRotary@
    3CA00 cpConstraintIsRotaryLimitJoint
    3CA00 cpRotaryLimitJointAlloc
    3CA00 cpRotaryLimitJointGetMax
    3CA00 cpRotaryLimitJointGetMin
    3CA00 cpRotaryLimitJointInit
    3CA00 cpRotaryLimitJointNew
    3CA00 cpRotaryLimitJointSetMax
    3CA00 cpRotaryLimitJointSetMin
    3E912 ?cpCheckAxis@@YAEUcpVect@@000@Z
    3E912 ?cpCheckPointGreater@@YAEUcpVect@@00@Z
    3F010 ??_C@_0CD@HCBADPFN@Constraint?5is?5not?5a?5ratchet?5joi@
    3F010 ??_C@_0CH@CIBCIAPI@cpConstraintIsRatchetJoint?$CIcons@
    3F010 ??_C@_0CI@IOCLBBEC@C?3?2code?2chipmunk2d?2src?2cpRatche@
    3F010 cpConstraintIsRatchetJoint
    3F010 cpRatchetJointAlloc
    3F010 cpRatchetJointGetAngle
    3F010 cpRatchetJointGetPhase
    3F010 cpRatchetJointGetRatchet
    3F010 cpRatchetJointInit
    3F010 cpRatchetJointNew
    3F010 cpRatchetJointSetAngle
    3F010 cpRatchetJointSetPhase
    3F010 cpRatchetJointSetRatchet
    414DC ?cpPolylineConvexDecomposition@@YAPEAUcpPolylineSet@@PEAUcpPolyline@@N@Z
    414DC ?cpPolylineFree@@YAXPEAUcpPolyline@@@Z
    414DC ?cpPolylineIsClosed@@YAEPEAUcpPolyline@@@Z
    414DC ?cpPolylineSetAlloc@@YAPEAUcpPolylineSet@@XZ
    414DC ?cpPolylineSetCollectSegment@@YAXUcpVect@@0PEAUcpPolylineSet@@@Z
    414DC ?cpPolylineSetDestroy@@YAXPEAUcpPolylineSet@@E@Z
    414DC ?cpPolylineSetFree@@YAXPEAUcpPolylineSet@@E@Z
    414DC ?cpPolylineSetInit@@YAPEAUcpPolylineSet@@PEAU1@@Z
    414DC ?cpPolylineSetNew@@YAPEAUcpPolylineSet@@XZ
    414DC ?cpPolylineSimplifyCurves@@YAPEAUcpPolyline@@PEAU1@N@Z
    414DC ?cpPolylineSimplifyVertexes@@YAPEAUcpPolyline@@PEAU1@N@Z
    414DC ?cpPolylineToConvexHull@@YAPEAUcpPolyline@@PEAU1@N@Z
    414DC __real@bff0000000000000
    476FA ??_C@_0BE@JGPNANJI@0?5?$DM?$DN?5i?5?$CG?$CG?5i?5?$DM?5count@
    476FA ??_C@_0BE@NKBBAMDL@Index?5out?5of?5range?4@
    476FA ??_C@_0BL@GGFNPJLA@Shape?5is?5not?5a?5poly?5shape?4@
    476FA ??_C@_0BL@JKMOEFBA@shape?9?$DOklass?5?$DN?$DN?5?$CGpolyClass@
    476FA ??_C@_0CF@LPOLNKEC@C?3?2code?2chipmunk2d?2src?2cpPolySh@
    476FA __real@fff0000000000000
    476FA cpBoxShapeInit
    476FA cpBoxShapeInit2
    476FA cpBoxShapeNew
    476FA cpBoxShapeNew2
    476FA cpPolyShapeAlloc
    476FA cpPolyShapeGetCount
    476FA cpPolyShapeGetRadius
    476FA cpPolyShapeGetVert
    476FA cpPolyShapeInit
    476FA cpPolyShapeInitRaw
    476FA cpPolyShapeNew
    476FA cpPolyShapeNewRaw
    476FA cpPolyShapeSetRadius
    476FA cpPolyShapeSetVerts
    476FA cpPolyShapeSetVertsRaw
    4DF1C ??_C@_0CB@GFPDOKDK@Constraint?5is?5not?5a?5pivot?5joint@
    4DF1C ??_C@_0CF@KDGNGKAM@cpConstraintIsPivotJoint?$CIconstr@
    4DF1C ??_C@_0CG@NNGOFJAJ@C?3?2code?2chipmunk2d?2src?2cpPivotJ@
    4DF1C cpConstraintIsPivotJoint
    4DF1C cpPivotJointAlloc
    4DF1C cpPivotJointGetAnchorA
    4DF1C cpPivotJointGetAnchorB
    4DF1C cpPivotJointInit
    4DF1C cpPivotJointNew
    4DF1C cpPivotJointNew2
    4DF1C cpPivotJointSetAnchorA
    4DF1C cpPivotJointSetAnchorB
    50A9A ??_C@_0BP@DIKMIKPC@Constraint?5is?5not?5a?5pin?5joint?4@
    50A9A ??_C@_0CD@IKEJKCA@cpConstraintIsPinJoint?$CIconstrai@
    50A9A ??_C@_0CE@FHBPCHOC@C?3?2code?2chipmunk2d?2src?2cpPinJoi@
    50A9A cpConstraintIsPinJoint
    50A9A cpPinJointAlloc
    50A9A cpPinJointGetAnchorA
    50A9A cpPinJointGetAnchorB
    50A9A cpPinJointGetDist
    50A9A cpPinJointInit
    50A9A cpPinJointNew
    50A9A cpPinJointSetAnchorA
    50A9A cpPinJointSetAnchorB
    50A9A cpPinJointSetDist
    53A02 ?cpMarchHard@@YAXUcpBB@@KKNP6AXUcpVect@@1PEAX@Z2P6AN12@Z2@Z
    53A02 ?cpMarchSoft@@YAXUcpBB@@KKNP6AXUcpVect@@1PEAX@Z2P6AN12@Z2@Z
    56FCA ?ThreadProc@@YAIPEAX@Z
    56FCA ?cpHastySpaceFree@@YAXPEAUcpSpace@@@Z
    56FCA ?cpHastySpaceGetThreads@@YAKPEAUcpSpace@@@Z
    56FCA ?cpHastySpaceNew@@YAPEAUcpSpace@@XZ
    56FCA ?cpHastySpaceSetThreads@@YAXPEAUcpSpace@@K@Z
    56FCA ?cpHastySpaceStep@@YAXPEAUcpSpace@@N@Z
    56FCA ?pthread_cond_broadcast@@YAHPEAUpthread_cond_t@@@Z
    56FCA ?pthread_cond_destroy@@YAHPEAUpthread_cond_t@@@Z
    56FCA ?pthread_cond_init@@YAHPEAUpthread_cond_t@@PEBUpthread_condattr_t@@@Z
    56FCA ?pthread_cond_signal@@YAHPEAUpthread_cond_t@@@Z
    56FCA ?pthread_cond_wait@@YAHPEAUpthread_cond_t@@PEAU_RTL_CRITICAL_SECTION@@@Z
    56FCA ?pthread_create@@YAHPEAPEAXPEBUpthread_attr_t@@P6APEAXPEAX@Z2@Z
    56FCA ?pthread_join@@YAHPEAXPEAPEAX@Z
    56FCA ?pthread_mutex_destroy@@YAHPEAU_RTL_CRITICAL_SECTION@@@Z
    56FCA ?pthread_mutex_init@@YAHPEAU_RTL_CRITICAL_SECTION@@PEBUpthread_mutexattr_t@@@Z
    56FCA ?pthread_mutex_lock@@YAHPEAU_RTL_CRITICAL_SECTION@@@Z
    56FCA ?pthread_mutex_unlock@@YAHPEAU_RTL_CRITICAL_SECTION@@@Z
    5CACE ?cpHashSetCount@@YAHPEAUcpHashSet@@@Z
    5CACE ?cpHashSetEach@@YAXPEAUcpHashSet@@P6AXPEAX1@Z1@Z
    5CACE ?cpHashSetFilter@@YAXPEAUcpHashSet@@P6AEPEAX1@Z1@Z
    5CACE ?cpHashSetFind@@YAPEBXPEAUcpHashSet@@_KPEBX@Z
    5CACE ?cpHashSetFree@@YAXPEAUcpHashSet@@@Z
    5CACE ?cpHashSetInsert@@YAPEBXPEAUcpHashSet@@_KPEBXP6APEAX2PEAX@Z3@Z
    5CACE ?cpHashSetNew@@YAPEAUcpHashSet@@HP6AEPEBX0@Z@Z
    5CACE ?cpHashSetRemove@@YAPEBXPEAUcpHashSet@@_KPEBX@Z
    5CACE ?cpHashSetSetDefaultValue@@YAXPEAUcpHashSet@@PEAX@Z
    5F67A ??_C@_0CC@EMANDPKL@Constraint?5is?5not?5a?5groove?5join@
    5F67A ??_C@_0CG@KMLOLKEK@cpConstraintIsGrooveJoint?$CIconst@
    5F67A ??_C@_0CH@JGINDMKI@C?3?2code?2chipmunk2d?2src?2cpGroove@
    5F67A cpConstraintIsGrooveJoint
    5F67A cpGrooveJointAlloc
    5F67A cpGrooveJointGetAnchorB
    5F67A cpGrooveJointGetGrooveA
    5F67A cpGrooveJointGetGrooveB
    5F67A cpGrooveJointInit
    5F67A cpGrooveJointNew
    5F67A cpGrooveJointSetAnchorB
    5F67A cpGrooveJointSetGrooveA
    5F67A cpGrooveJointSetGrooveB
    628EE ??_C@_0CE@LEAEGMOF@cpConstraintIsGearJoint?$CIconstra@
    628EE ??_C@_0CF@CPBKBMCC@C?3?2code?2chipmunk2d?2src?2cpGearJo@
    628EE cpConstraintIsGearJoint
    628EE cpGearJointAlloc
    628EE cpGearJointGetPhase
    628EE cpGearJointGetRatio
    628EE cpGearJointInit
    628EE cpGearJointNew
    628EE cpGearJointSetPhase
    628EE cpGearJointSetRatio
    6473A ??_C@_0CD@OOFLOKFE@Constraint?5is?5not?5a?5damped?5spri@
    6473A ??_C@_0CH@MOLJEJLK@cpConstraintIsDampedSpring?$CIcons@
    6473A ??_C@_0CI@DCMJEKFI@C?3?2code?2chipmunk2d?2src?2cpDamped@
    6473A cpConstraintIsDampedSpring
    6473A cpDampedSpringAlloc
    6473A cpDampedSpringGetAnchorA
    6473A cpDampedSpringGetAnchorB
    6473A cpDampedSpringGetDamping
    6473A cpDampedSpringGetRestLength
    6473A cpDampedSpringGetSpringForceFunc
    6473A cpDampedSpringGetStiffness
    6473A cpDampedSpringInit
    6473A cpDampedSpringNew
    6473A cpDampedSpringSetAnchorA
    6473A cpDampedSpringSetAnchorB
    6473A cpDampedSpringSetDamping
    6473A cpDampedSpringSetRestLength
    6473A cpDampedSpringSetSpringForceFunc
    6473A cpDampedSpringSetStiffness
    68246 ??_C@_0CK@OCECFABC@Constraint?5is?5not?5a?5damped?5rota@
    68246 ??_C@_0CN@MMMCCLNP@cpConstraintIsDampedRotarySprin@
    68246 ??_C@_0CO@DHKPJPME@C?3?2code?2chipmunk2d?2src?2cpDamped@
    68246 cpConstraintIsDampedRotarySpring
    68246 cpDampedRotarySpringAlloc
    68246 cpDampedRotarySpringGetDamping
    68246 cpDampedRotarySpringGetRestAngle
    68246 cpDampedRotarySpringGetSpringTorqueFunc
    68246 cpDampedRotarySpringGetStiffness
    68246 cpDampedRotarySpringInit
    68246 cpDampedRotarySpringNew
    68246 cpDampedRotarySpringSetDamping
    68246 cpDampedRotarySpringSetRestAngle
    68246 cpDampedRotarySpringSetSpringTorqueFunc
    68246 cpDampedRotarySpringSetStiffness
    6AD2A ??_C@_0BA@MPBMAGGE@maxBias?5?$DO?$DN?50?40f@
    6AD2A ??_C@_0BB@IFGICIFL@maxForce?5?$DO?$DN?50?40f@
    6AD2A ??_C@_0BC@KAIMOODF@errorBias?5?$DO?$DN?50?40f@
    6AD2A ??_C@_0BK@MLEMNEAH@maxBias?5must?5be?5positive?4@
    6AD2A ??_C@_0BL@NAOGOBNO@maxForce?5must?5be?5positive?4@
    6AD2A ??_C@_0BM@EOAKJCHP@errorBias?5must?5be?5positive?4@
    6AD2A ??_C@_0CG@BECOEBIA@C?3?2code?2chipmunk2d?2src?2cpConstr@
    6AD2A ?cpConstraintInit@@YAXPEAUcpConstraint@@PEBUcpConstraintClass@@PEAUcpBody@@2@Z
    6AD2A cpConstraintDestroy
    6AD2A cpConstraintFree
    6AD2A cpConstraintGetBodyA
    6AD2A cpConstraintGetBodyB
    6AD2A cpConstraintGetCollideBodies
    6AD2A cpConstraintGetErrorBias
    6AD2A cpConstraintGetImpulse
    6AD2A cpConstraintGetMaxBias
    6AD2A cpConstraintGetMaxForce
    6AD2A cpConstraintGetPostSolveFunc
    6AD2A cpConstraintGetPreSolveFunc
    6AD2A cpConstraintGetSpace
    6AD2A cpConstraintGetUserData
    6AD2A cpConstraintSetCollideBodies
    6AD2A cpConstraintSetErrorBias
    6AD2A cpConstraintSetMaxBias
    6AD2A cpConstraintSetMaxForce
    6AD2A cpConstraintSetPostSolveFunc
    6AD2A cpConstraintSetPreSolveFunc
    6AD2A cpConstraintSetUserData
    6CDAE ??_C@_07GKEPOBDJ@cpFalse@
    6CDAE ??_C@_0CF@IKAMGAMO@C?3?2code?2chipmunk2d?2src?2cpCollis@
    6CDAE ??_C@_0CM@LLMLMFGG@Internal?5Error?3?5Shape?5types?5are@
    6CDAE ?cpCollide@@YA?AUcpCollisionInfo@@PEBUcpShape@@0IPEAUcpContact@@@Z
    6CDAE __real@bfe0000000000000
    6CDAE __xmm@00000000000000003ff0000000000000
    76D6C ??_C@_0CA@BICGMHI@0?40f?5?$DM?$DN?5mass?5?$CG?$CG?5mass?5?$DM?5INFINITY@
    76D6C ??_C@_0CA@LFFNMPOF@C?3?2code?2chipmunk2d?2src?2cpBody?4c@
    76D6C ??_C@_0CC@LGKKMLJA@Mass?5must?5be?5positive?5and?5finit@
    76D6C ??_C@_0CE@MHNJG@Moment?5of?5Inertia?5must?5be?5posit@
    76D6C ??_C@_0DH@KGALPJPO@You?5cannot?5set?5the?5mass?5of?5kine@
    76D6C ??_C@_0P@GCNFICLO@moment?5?$DO?$DN?50?40f@
    76D6C ?cpBodyAccumulateMassFromShapes@@YAXPEAUcpBody@@@Z
    76D6C ?cpBodyAddShape@@YAXPEAUcpBody@@PEAUcpShape@@@Z
    76D6C ?cpBodyRemoveConstraint@@YAXPEAUcpBody@@PEAUcpConstraint@@@Z
    76D6C ?cpBodyRemoveShape@@YAXPEAUcpBody@@PEAUcpShape@@@Z
    76D6C cpBodyAlloc
    76D6C cpBodyApplyForceAtLocalPoint
    76D6C cpBodyApplyForceAtWorldPoint
    76D6C cpBodyApplyImpulseAtLocalPoint
    76D6C cpBodyApplyImpulseAtWorldPoint
    76D6C cpBodyDestroy
    76D6C cpBodyEachArbiter
    76D6C cpBodyEachConstraint
    76D6C cpBodyEachShape
    76D6C cpBodyFree
    76D6C cpBodyGetAngle
    76D6C cpBodyGetAngularVelocity
    76D6C cpBodyGetCenterOfGravity
    76D6C cpBodyGetForce
    76D6C cpBodyGetMass
    76D6C cpBodyGetMoment
    76D6C cpBodyGetPosition
    76D6C cpBodyGetRotation
    76D6C cpBodyGetSpace
    76D6C cpBodyGetTorque
    76D6C cpBodyGetType
    76D6C cpBodyGetUserData
    76D6C cpBodyGetVelocity
    76D6C cpBodyGetVelocityAtLocalPoint
    76D6C cpBodyGetVelocityAtWorldPoint
    76D6C cpBodyInit
    76D6C cpBodyIsSleeping
    76D6C cpBodyKineticEnergy
    76D6C cpBodyLocalToWorld
    76D6C cpBodyNew
    76D6C cpBodyNewKinematic
    76D6C cpBodyNewStatic
    76D6C cpBodySetAngle
    76D6C cpBodySetAngularVelocity
    76D6C cpBodySetCenterOfGravity
    76D6C cpBodySetForce
    76D6C cpBodySetMass
    76D6C cpBodySetMoment
    76D6C cpBodySetPosition
    76D6C cpBodySetPositionUpdateFunc
    76D6C cpBodySetTorque
    76D6C cpBodySetType
    76D6C cpBodySetUserData
    76D6C cpBodySetVelocity
    76D6C cpBodySetVelocityUpdateFunc
    76D6C cpBodyUpdatePosition
    76D6C cpBodyUpdateVelocity
    76D6C cpBodyWorldToLocal
    7F24E ??_C@_0CC@POEOCKMJ@C?3?2code?2chipmunk2d?2src?2cpBBTree@
    7F24E __real@3fb99999a0000000
    7F24E cpBBTreeAlloc
    7F24E cpBBTreeInit
    7F24E cpBBTreeNew
    7F24E cpBBTreeOptimize
    7F24E cpBBTreeSetVelocityFunc
    89E04 ?cpArrayContains@@YAEPEAUcpArray@@PEAX@Z
    89E04 ?cpArrayDeleteObj@@YAXPEAUcpArray@@PEAX@Z
    89E04 ?cpArrayFree@@YAXPEAUcpArray@@@Z
    89E04 ?cpArrayFreeEach@@YAXPEAUcpArray@@P6AXPEAX@Z@Z
    89E04 ?cpArrayNew@@YAPEAUcpArray@@H@Z
    89E04 ?cpArrayPop@@YAPEAXPEAUcpArray@@@Z
    89E04 ?cpArrayPush@@YAXPEAUcpArray@@PEAX@Z
    8AF2A ??_C@_0BE@MLLIKHMP@count?5?$DN?$DN?5arb?9?$DOcount@
    8AF2A ??_C@_0CD@HOPIJKPC@C?3?2code?2chipmunk2d?2src?2cpArbite@
    8AF2A ??_C@_0CF@JBGPAFFO@0?5?$DM?$DN?5i?5?$CG?$CG?5i?5?$DM?5cpArbiterGetCount@
    8AF2A ??_C@_0DA@CFBNCHBE@The?5number?5of?5contact?5points?5ca@
    8AF2A ??_C@_0EF@BHBCPIOF@Index?5error?3?5The?5specified?5cont@
    8AF2A ?cpArbiterApplyCachedImpulse@@YAXPEAUcpArbiter@@N@Z
    8AF2A ?cpArbiterApplyImpulse@@YAXPEAUcpArbiter@@@Z
    8AF2A ?cpArbiterInit@@YAPEAUcpArbiter@@PEAU1@PEAUcpShape@@1@Z
    8AF2A ?cpArbiterPreStep@@YAXPEAUcpArbiter@@NNN@Z
    8AF2A ?cpArbiterUnthread@@YAXPEAUcpArbiter@@@Z
    8AF2A ?cpArbiterUpdate@@YAXPEAUcpArbiter@@PEAUcpCollisionInfo@@PEAUcpSpace@@@Z
    8AF2A cpArbiterCallWildcardBeginA
    8AF2A cpArbiterCallWildcardBeginB
    8AF2A cpArbiterCallWildcardPostSolveA
    8AF2A cpArbiterCallWildcardPostSolveB
    8AF2A cpArbiterCallWildcardPreSolveA
    8AF2A cpArbiterCallWildcardPreSolveB
    8AF2A cpArbiterCallWildcardSeparateA
    8AF2A cpArbiterCallWildcardSeparateB
    8AF2A cpArbiterGetBodies
    8AF2A cpArbiterGetContactPointSet
    8AF2A cpArbiterGetCount
    8AF2A cpArbiterGetDepth
    8AF2A cpArbiterGetFriction
    8AF2A cpArbiterGetNormal
    8AF2A cpArbiterGetPointA
    8AF2A cpArbiterGetPointB
    8AF2A cpArbiterGetRestitution
    8AF2A cpArbiterGetShapes
    8AF2A cpArbiterGetSurfaceVelocity
    8AF2A cpArbiterGetUserData
    8AF2A cpArbiterIgnore
    8AF2A cpArbiterIsFirstContact
    8AF2A cpArbiterIsRemoval
    8AF2A cpArbiterSetContactPointSet
    8AF2A cpArbiterSetFriction
    8AF2A cpArbiterSetRestitution
    8AF2A cpArbiterSetSurfaceVelocity
    8AF2A cpArbiterSetUserData
    8AF2A cpArbiterTotalImpulse
    8AF2A cpArbiterTotalKE
    91994 ??_C@_01EEMJAFIK@?6@
    91994 ??_C@_05BPCAAOFH@7?40?43@
    91994 ??_C@_0BD@HELCJHMM@Chipmunk?5warning?3?5@
    91994 ??_C@_0BH@OFKBBFJD@?7Failed?5condition?3?5?$CFs?6@
    91994 ??_C@_0CB@JFLKHDHH@Aborting?5due?5to?5Chipmunk?5error?3@
    91994 ??_C@_0P@NHEGDOKI@?7Source?3?$CFs?3?$CFd?6@
    91994 ?_OptionsStorage@?1??__local_stdio_printf_options@@9@4_KA
    91994 ?cpLoopIndexes@@YAXPEBUcpVect@@HPEAH1@Z
    91994 __local_stdio_printf_options
    91994 __real@4008000000000000
    91994 __real@400921fb54442d18
    91994 __real@4010000000000000
    91994 __real@4018000000000000
    91994 __real@4028000000000000
    91994 cpAreaForCircle
    91994 cpAreaForPoly
    91994 cpAreaForSegment
    91994 cpCentroidForPoly
    91994 cpConvexHull
    91994 cpMessage
    91994 cpMomentForBox
    91994 cpMomentForBox2
    91994 cpMomentForCircle
    91994 cpMomentForPoly
    91994 cpMomentForSegment
    91994 cpVersionString
    91994 fprintf

In the excerpt above you see that only the C++-mangled name is exported in the case of cpHastySpace.

Tried a few things like ensuring that CP_EXPORT is actually applied to relevant lines (and it was), also tried dropping the "force c++" part from cmake files. Really don't know why it doesn't work.

This was the only way that I found to make it work, but I don't know if it might be undesirable:

diff --git a/include/chipmunk/chipmunk.h b/include/chipmunk/chipmunk.h
index d98ba7e..6239d0d 100644
--- a/include/chipmunk/chipmunk.h
+++ b/include/chipmunk/chipmunk.h
@@ -124,6 +124,7 @@ typedef struct cpSpace cpSpace;
 #include "cpConstraint.h"

 #include "cpSpace.h"
+#include "cpHastySpace.h"

 // Chipmunk 7.0.3
 #define CP_VERSION_MAJOR 7