Hello,
I am trying to write a probe plugin which calculates the muscle metabolic cost. My calculation has a small difference compared to the built-in Umberger2010MuscleMetabolicsProbe of OpenSim. I have my set up that works well for the plugin example tutorials. Now, with the same set up, I copy the code from Umberger2010MuscleMetabolicsProbe.h and Umberger2010MuscleMetabolicsProbe.cpp which are in OpenSim source code. Then,
1. Include: #include <string>
#include "osimPluginDLL.h"
#include <OpenSim\Simulation\Model\Probe.h>
#include <OpenSim\Simulation\Model\Model.h>
#include <OpenSim\Common\Object.h>
2. Replace all OSIMSIMULATION_API by OSIMPLUGIN_API
3. In RegisterTypes_osimPlugin.cpp, I have
Object::registerType(Umberger2010MusMetProbeNew() );
Object::registerType(Umberger2010MusMetProbeNew_MetabolicMuscleParameter());
Object::registerType(Umberger2010MusMetProbeNew_MetabolicMuscleParameterSet());
4. I have not implemented my calculation. Just want to test if it works.
When I build the solution, I get the errors:
=================================================================================================
1>------ Rebuild All started: Project: ZERO_CHECK, Configuration: RelWithDebInfo x64 ------
1> Checking Build System
1> CMake does not need to re-run because C:/OpenSimPlugins/Umberger2010MusMetProbe_Act_build/CMakeFiles/generate.stamp is up-to-date.
2>------ Rebuild All started: Project: Libraries - Umberger2010MusMetProbeNew, Configuration: RelWithDebInfo x64 ------
2>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppBuild.targets(392,5): warning MSB8028: The intermediate directory (Umberger2010MusMetProbe_Act.dir\RelWithDebInfo\) contains files shared from another project (Libraries - Umberger2010MusMetProbeAct.vcxproj, Libraries - Umberger2010MusMetProbe_Act.vcxproj). This can lead to incorrect clean and rebuild behavior.
2> Building Custom Rule C:/OpenSimPlugins/Umberger2010MusMetProbe_Act/CMakeLists.txt
2> CMake does not need to re-run because C:\OpenSimPlugins\Umberger2010MusMetProbe_Act_build\CMakeFiles\generate.stamp is up-to-date.
2> RegisterTypes_osimPlugin.cpp
2> Umberger2010MusMetProbeNew.cpp
2> Generating Code...
2> Creating library C:/OpenSimPlugins/Umberger2010MusMetProbe_Act_build/RelWithDebInfo/Umberger2010MusMetProbe_Act.lib and object C:/OpenSimPlugins/Umberger2010MusMetProbe_Act_build/RelWithDebInfo/Umberger2010MusMetProbe_Act.exp
2>RegisterTypes_osimPlugin.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __cdecl OpenSim::Probe::Probe(class OpenSim::Probe &&)" (__imp_??0Probe@OpenSim@@QEAA@$$QEAV01@@Z) referenced in function "public: __cdecl OpenSim::Umberger2010MusMetProbeNew::Umberger2010MusMetProbeNew(class OpenSim::Umberger2010MusMetProbeNew &&)" (??0Umberger2010MusMetProbeNew@OpenSim@@QEAA@$$QEAV01@@Z)
2>Umberger2010MusMetProbeNew.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __cdecl OpenSim::Probe::Probe(class OpenSim::Probe &&)" (__imp_??0Probe@OpenSim@@QEAA@$$QEAV01@@Z)
2>RegisterTypes_osimPlugin.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: class OpenSim::Probe & __cdecl OpenSim::Probe::operator=(class OpenSim::Probe &&)" (__imp_??4Probe@OpenSim@@QEAAAEAV01@$$QEAV01@@Z) referenced in function "public: class OpenSim::Umberger2010MusMetProbeNew & __cdecl OpenSim::Umberger2010MusMetProbeNew::operator=(class OpenSim::Umberger2010MusMetProbeNew &&)" (??4Umberger2010MusMetProbeNew@OpenSim@@QEAAAEAV01@$$QEAV01@@Z)
2>Umberger2010MusMetProbeNew.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: class OpenSim::Probe & __cdecl OpenSim::Probe::operator=(class OpenSim::Probe &&)" (__imp_??4Probe@OpenSim@@QEAAAEAV01@$$QEAV01@@Z)
2>C:\OpenSimPlugins\Umberger2010MusMetProbe_Act_build\RelWithDebInfo\Umberger2010MusMetProbe_Act.dll : fatal error LNK1120: 2 unresolved externals
3>------ Rebuild All started: Project: ALL_BUILD, Configuration: RelWithDebInfo x64 ------
3> Building Custom Rule C:/OpenSimPlugins/Umberger2010MusMetProbe_Act/CMakeLists.txt
3> CMake does not need to re-run because C:\OpenSimPlugins\Umberger2010MusMetProbe_Act_build\CMakeFiles\generate.stamp is up-to-date.
4>------ Skipped Rebuild All: Project: INSTALL, Configuration: RelWithDebInfo x64 ------
4>Project not selected to build for this solution configuration
========== Rebuild All: 2 succeeded, 1 failed, 1 skipped ==========
===================================================================================================
Any help and advise would be great. Thank you in advance.
Vinh
Develop a Probe plugin
- Dimitar Stanev
- Posts: 1096
- Joined: Fri Jan 31, 2014 5:14 am
Re: Develop a Probe plugin
You need to define the move constructor and move assignment operator for Umberger2010MusMetProbeNew class, because they were not declared implicitly by the compiler.
When you registered the new class you called (Object::registerType(Umberger2010MusMetProbeNew());) which creates an rvalue of type Umberger2010MusMetProbeNew and that is why the move operators are required.
Code: Select all
Umberger2010MusMetProbeNew(Umberger2010MusMetProbeNew &&) { ... };
Umberger2010MusMetProbeNew::operator=(Umberger2010MusMetProbeNew &&) {... return *this};
- Vinh Nguyen
- Posts: 21
- Joined: Fri Sep 26, 2014 8:53 pm
Re: Develop a Probe plugin
Thank you, Dimitar.
I got it worked.
Vinh
I got it worked.
Vinh