Problems in updating to OPC 7.2

Forums: 

Hello,

I am not entirely sure this is the right forum . I installed the latest FreeCAD with netgen support and I encountered the following problem

nglib/netgen has the following three undefined references

/usr/local/lib/libocc.dylib: U StlAPI_Writer::Write(TopoDS_Shape const&, char const*)
/usr/local/lib/libocc.dylib: U StlAPI_Writer::ASCIIMode()
/usr/local/lib/libocc.dylib: U StlAPI_Writer::StlAPI_Writer()

In OPC 7.1.0 we have 

/usr/local/Cellar/opencascade/7.1.0_1/lib/libTKSTL.7.1.0.dylib: 00000000000088f0 T StlAPI_Writer::Write(TopoDS_Shape const&, char const*)
/usr/local/Cellar/opencascade/7.1.0_1/lib/libTKSTL.7.1.0.dylib: 00000000000088e6 T StlAPI_Writer::ASCIIMode()
/usr/local/Cellar/opencascade/7.1.0_1/lib/libTKSTL.7.1.0.dylib: 00000000000088dc T StlAPI_Writer::StlAPI_Writer()
/usr/local/Cellar/opencascade/7.1.0_1/lib/libTKSTL.7.1.0.dylib: 0000000000008870 T StlAPI_Writer::StlAPI_Writer()

While in OPC 7.2.0 we have

/usr/local/Cellar/opencascade/7.2.0/lib/libTKSTL.7.2.0.dylib: 0000000000006734 T StlAPI_Writer::Write(TopoDS_Shape const&, char const*)
/usr/local/Cellar/opencascade/7.2.0/lib/libTKSTL.7.2.0.dylib: 000000000000672a T StlAPI_Writer::StlAPI_Writer()
/usr/local/Cellar/opencascade/7.2.0/lib/libTKSTL.7.2.0.dylib: 0000000000006720 T StlAPI_Writer::StlAPI_Writer()

So the StlAPI_Writer::ASCIIMode() is undefined when I switch to 7.2. The code is still there, but if I understand correctly, the method went from an exported reference to an internal one in the dylib 

/usr/local/Cellar/opencascade/7.1.0_1/include/opencascade/StlAPI_Writer.hxx
//! default parameters: ASCIIMode.
Standard_EXPORT Standard_Boolean& ASCIIMode();
Standard_Boolean theASCIIMode;
/usr/local/Cellar/opencascade/7.2.0/include/opencascade/StlAPI_Writer.hxx
//! Creates a writer object with default parameters: ASCIIMode.
Standard_Boolean& ASCIIMode() { return myASCIIMode; }
Standard_Boolean myASCIIMode;

 

 

 

Kirill Gavrilov's picture

So the StlAPI_Writer::ASCIIMode() is undefined when I switch to 7.2. The code is still there, but if I understand correctly, the method went from an exported reference to an internal one in the dylib 

It is not "internal" - it is just inline now (means that the method is inlined into application by a compiler rather than resolved by a linker).

Most OCCT releases have no ABI compatibility (and minor releases with second number 7.X changed are certainly not).
This means, that you cannot replace OCCT libraries of another version without re-compiling the application (and in case if you have several components depending on OCCT - they all should be recompiled using the same version of OCCT).