I am using external header files to compile my cpp file on the Window 10 PC. I can compile the cpp file with visual studio on the same computer succesfully before.
I setup the IDE environment on Visual Studio with the URL (https://cyberbotics.com/doc/guide/using-your-ide?tab-language=c++#link-with-the-webots-libraries).
#include <webots/Robot.hpp>
#include <webots/DistanceSensor.hpp>
#include <webots/Motor.hpp>
// time in [ms] of a simulation step
#define TIME_STEP 64
#define MAX_SPEED 6.28
// All the webots classes are defined in the "webots" namespace
using namespace webots;
// entry point of the controller
int main(int argc, char **argv) {
// create the Robot instance.
Robot *robot = new Robot();
// initialize devices
DistanceSensor *ps[8];
char psNames[8][4] = {
"ps0", "ps1", "ps2", "ps3",
"ps4", "ps5", "ps6", "ps7"
};
for (int i = 0; i < 8; i++) {
ps[i] = robot->getDistanceSensor(psNames[i]);
ps[i]->enable(TIME_STEP);
}
Motor *leftMotor = robot->getMotor("left wheel motor");
Motor *rightMotor = robot->getMotor("right wheel motor");
leftMotor->setPosition(INFINITY);
rightMotor->setPosition(INFINITY);
leftMotor->setVelocity(0.0);
rightMotor->setVelocity(0.0);
// feedback loop: step simulation until an exit event is received
while (robot->step(TIME_STEP) != -1) {
// read sensors outputs
double psValues[8];
for (int i = 0; i < 8 ; i++)
psValues[i] = ps[i]->getValue();
// detect obstacles
bool right_obstacle =
psValues[0] > 80.0 ||
psValues[1] > 80.0 ||
psValues[2] > 80.0;
bool left_obstacle =
psValues[5] > 80.0 ||
psValues[6] > 80.0 ||
psValues[7] > 80.0;
// initialize motor speeds at 50% of MAX_SPEED.
double leftSpeed = 0.5 * MAX_SPEED;
double rightSpeed = 0.5 * MAX_SPEED;
// modify speeds according to obstacles
if (left_obstacle) {
// turn right
leftSpeed += 0.5 * MAX_SPEED;
rightSpeed -= 0.5 * MAX_SPEED;
}
else if (right_obstacle) {
// turn left
leftSpeed -= 0.5 * MAX_SPEED;
rightSpeed += 0.5 * MAX_SPEED;
}
// write actuators inputs
leftMotor->setVelocity(leftSpeed);
rightMotor->setVelocity(rightSpeed);
}
delete robot;
return 0; //EXIT_SUCCESS
}
Now I am using visual studio code to compile the same file with the same header files (C:\Program Files\Webots\include\controller\cpp) and library files ( C:\Program Files\Webots\lib\controller). But after added the path of external header files to cpp.property.json and task.json files, I got the error "undefined reference to symbol to xx".
Is there any document to show how to link the external library and external header files in VS code?
The code is: https://cyberbotics.com/doc/guide/tutorial-4-more-about-controllers?tab-language=c++
The error message is:
tasks.json is
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "C/C++: g++.exe build active file",
"command": "C:\\Program Files\\mingw-w64\\x86_64-8.1.0-win32-seh-rt_v6-rev0\\mingw64\\bin\\g++.exe",
"args": ["-g", "${file}", "-o", "${fileDirname}\\${fileBasenameNoExtension}.exe","-I","${fileDirname}\\"],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": ["$gcc"],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
The c_cpp_properties.json is:
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**","C:/Webots/include/controller/cpp/**"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"compilerPath": "C:\\cygwin64\\bin\\gcc.exe",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "clang-x64"
}
],
"version": 4
}