dartsim / dart Goto Github PK
View Code? Open in Web Editor NEWDART: Dynamic Animation and Robotics Toolkit
Home Page: http://dartsim.github.io/
License: BSD 2-Clause "Simplified" License
DART: Dynamic Animation and Robotics Toolkit
Home Page: http://dartsim.github.io/
License: BSD 2-Clause "Simplified" License
In numerical calculations one is told to avoid a lot of explicit calculations due to instability and or inefficiency. The most common example is to almost never do matrix inverse, but there are other stuff as well like explicitly calculating the Q in QR when factored using Householder reflectors. (iirc)
Whoever knows a lot about the numerical parts of dart may feel free to jump in this discussion and shed some light.
Just to show that there is at least some uses that one could investigate:
$ git grep "inverse()"
apps/balance/Controller.cpp: MatrixXd invM = (mSkel->getMassMatrix() + mKd * mTimestep).inverse();
apps/balance/Controller.cpp: VectorXd deltaQdot = aggregateMat.transpose() * (aggregateMat * aggregateMat.transpose()).inverse() * _deltaMomentum;
apps/hybrid/MyWindow.cpp: VectorXd x = A.inverse() * b;
apps/pdController/Controller.cpp: MatrixXd invM = (mSkel->getMassMatrix() + mKd * mTimestep).inverse();
docs/dart-tutorial/pdControl.tex: .inverse();
src/dynamics/ContactDynamics.cpp: MatrixXd Minv = mMInv;//.inverse();
src/dynamics/SkeletonDynamics.cpp: mMInv = mM.inverse();
src/dynamics/SkeletonDynamics.cpp: mMInv = mM.inverse();
src/dynamics/SkeletonDynamics.cpp: // new_qdot = newJw.inverse()*w
src/dynamics/SkeletonDynamics.cpp: Vector3d new_qdot = newJwBody.inverse()*oldJwBody*old_qdot;
src/dynamics/SkeletonDynamics.cpp: // new_qdot = newJw.inverse()*w
src/dynamics/SkeletonDynamics.cpp: Vector3d new_qdot = newJwBody.inverse()*oldJwBody*old_qdot;
src/kinematics/BodyNode.h: inline Eigen::Matrix4d getWorldInvTransform() const { return mW.inverse(); } ///< Transformation from the world coordinates to the local coordinates of this body node
src/kinematics/BodyNode.h: inline Eigen::Matrix4d getLocalInvTransform() const { return mT.inverse(); } ///< Transformation from the local coordinates of the parent node to the local coordinates of this body node
src/kinematics/Transformation.cpp: return mTransform.inverse();
src/utils/UtilsRotation.cpp: Quaterniond qinv = q.inverse();
The rule of thumb I think is that matrix inverse is only ok for very small matrices. So I guess investigation concretely here means that we should remove inverse where the matrices actually aren't tiny and add a "trust me I know what I'm doing comment" on the other places.
Right now the build script is using a mix of CMake's config and module modes. Pushkar claims we are using module mode. However, I claim we are not, at least not the way it is supposed to be used. Also, I think config mode is preferred because it does not include random guessing where libraries might be installed. The CMake documentation states that a CMake library project should provide the necessary file to find it in config mode (see below).
"Native CMake projects that are intended to be used by other projects [...] should provide at a minimum a Config.cmake or a -config.cmake file."
Short description of CMake's config and module modes:
In module mode, either CMake itself or the software using a library is providing a Find.cmake file that searches for a required library on the system. In config mode the library itself installs a Config.cmake file that provides all the necessary information to link against the library. Note that the Config.cmake does not have to search for the library because it got installed by the library itself and just knows where the library is.
Our current setup:
DART itself (like in config mode) is providing a FindDART.cmake file (named according to module mode). The FindDART.cmake file is generated from a file called DARTConfig.cmake.in (named according to config mode). I am not sure if our FindDART.cmake searches for DART (like in module mode) or just provides the hard paths to DART (like in config mode).
For more information see:
http://www.cmake.org/Wiki/CMake:How_To_Find_Libraries
http://www.cmake.org/Wiki/CMake/Tutorials/How_to_create_a_ProjectConfig.cmake_file
The new collision detection in DART produces different contact points from the older version. If you look at the contact points on the character in "balance" app, the contact points are not at the bottom of the foot.
I emailed Ana about this before and she is already working on it. I just created this issue to keep track of it.
Our CMake script currently only creates a single configuration for GCC, whereas Windows by default has multiple. We want the user to be able to choose whether to apply debug or release compiler options.
In debug mode we want to supply the -g compiler option. In release mode we want to define -NDEBUG such that assert statements are not excecuted.
Both are dependencies and should not be recompiled for every clean make.
This leads to linker errors in GRIP under Windows when trying to build in debug mode. Here is an example:
error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in tabTemplate.obj C:\Users\Tobias\SkyDrive\grip\build\projects\tabTemplate\robotics.lib(World.obj)
FCL includes functionality to smartly organize objects/link into a data structure such that not all pairs of them need to be checked for collision. We are currently not making use of that functionality and instead check all pairs for collision.
This part of the CMakeList files unables the user to set the install prefix by hand using something like
cmake -DCMAKE_INSTALL_PREFIX=/home/USER/devel ..
if(WIN32)
set(CMAKE_INSTALL_PREFIX "C:/Golems" CACHE PATH "Install prefix" FORCE)
elseif(APPLE)
set(CMAKE_INSTALL_PREFIX "/usr/local" CACHE PATH "Install prefix" FORCE)
else()
set(CMAKE_INSTALL_PREFIX "/usr" CACHE PATH "Install prefix" FORCE)
endif()
We should directly pass geometric primitives to FCL instead of converting them to meshes. Currently DART supports box and ellipsoid shapes. URDF supports box, sphere and cylinder. FCL supports all of them and many more except ellipsoids. We should add shapes to DART for sphere and cylinder and pass all of them except ellipsoids directly to FCL.
Robot can lean far forward without tipping over.
GRIP should not need to call find_package(DARTExt).
The same applies to GRIP tab applications. They should only need to call find_package(GRIP) and nothing else.
According to the CMake documentation a find script (or config file) should "Use find_package to detect other libraries that the library depends on" (http://www.cmake.org/Wiki/CMake:How_To_Find_Libraries)
boost chrono is not available in Boost 1.46 and it has been recently added as a dependency for DART. Is it really needed for DART in Windows ? I cannot compile unless I erase that from my CMake.in (Ubuntu 12.04 32-bits)
We currently cannot create the full ATLAS collision model from the urdf because it's links contain multiple collision shapes.
We don't need a place to store it in DART. We just need to transform the inertia matrix accordingly.
When running "cmake .", homebrew passes the flag:
-DCMAKE_INSTALL_PREFIX=/usr/local/Cellar/dartsim/2.3
It installs in /usr/local anyway. But brew expects that flag to be respected so it can symlink to /usr/local instead of hard code binaries. This makes upgrading/uninstallation much easier and safer, and let's you have several version of dart downloaded.
CMakeLists needs to be changed so that CMAKE_INSTALL_PREFIX is used instead of the OS defaults if it is specified.
Three problems:
1- Shape::mOffset is not used and should be removed.
2- The shape is offset by mLocalCOM for visualization and not offset at all for collision checking.
3- Shape class should have a transformation wrt the local frame of the node it belongs to.
The current CMake file for DART asks for Boost 1.42 or higher. FCL, however, does NOT work with Boost 1.42 (it spits out errors related with assert. It works fine with Boost 1.49 tough.
Proposed solution: Update the CMake file for dart that requires Boost versions higher than 1.42 (1.43?, 1.44? ). I am currently using 1.49 in Debian Squeeze and 1.48 in Ubuntu 12.04
We currently pass the -O3 flag to g++ even when in debug mode. This is bad.
It seems that the libparser.a is not installed with the dart/robotics branch while it is needed by grip. I had to first install it with the dart/master branch and switch to robotics for the rest of the libraries. I am not sure if this is done on purpose.
Currently the URDF loader only supports URDF files that only use meshes to specify the link geometries. However, the URDF file format also allows the geometry to be defined as a box, cylinder or sphere.
DART currently has classes for box and ellipsoid shapes. We should probably add sphere and cylinder.
I tried to install off of the apt repositories today, and ran into a missing dependency for ubuntu 12.04 x64. After hunting around, it looks like libassimp3 wasn't released for precise:
http://www.ubuntuupdates.org/pm/libassimp3
http://www.ubuntuupdates.org/package/core/precise/universe/base/assimp
Has anyone else had this issue?
When cmaking 0fb16fc I get this error:
dart [robotics] % cmake .
-- The C compiler identification is GNU 4.7.2
-- The CXX compiler identification is GNU 4.7.2
-- Generate makefile/project file for DART
-- CMAKE_SOURCE_DIR = /home/arka3/repos/dart
-- CMAKE_BINARY_DIR = /home/arka3/repos/dart
-- Generate the path header file to /home/arka3/repos/dart/src/utils/Paths.h
-- Boost version: 1.49.0
-- Found the following Boost libraries:
-- system
-- filesystem
-- MATHPLOT = MATHPLOT_INCLUDE_DIR-NOTFOUND
-- Building DART source
-- (collision) var is
-- Configuring done
CMake Error at src/unittests/CMakeLists.txt:9 (add_library):
Cannot find source file:
/usr/src/gtest/src/gtest-all.cc
Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp
.hxx .in .txx
Apparently I'm missing googletest or gtest, but it's not mentioned on the wikipage
However revision d007c0c seems to work for me. Maybe @pushkar can shed some light on this?
DART splits up the kinematics and dynamics functionality into 2 different classes for skeleton and nodes. I think this is a good approach to keep things clean and organized.
However, some dynamics-related properties of nodes are misplaced and need to be moved to BodyNodeDynamics. Dynamics-related properties are for example mass and inertia. The mass of a node is currently stored in BodyNode and Shape, but not in BodyNodeDynamics. The inertia is stored in Shape.
We need to fix this in order to be able to have nodes with two different shapes for collision and visualization.
We're currently using slow, hello-world level rendering code. We should switch away from the deprecated "immediate mode" to vertex buffers, which are more efficient and let us directly reuse world transforms instead of stacking up local transforms using calls to glPushMatrix.
More information here: http://www.swiftless.com/tutorials/opengl4/4-opengl-4-vao.html http://stackoverflow.com/a/3493412 http://stackoverflow.com/a/6734071
I am getting the error message "Array not sorted!!!" (BodyNode.cpp, line 204) when loading the Hubo URDF model into DART in debug mode. It seems that DART expects dependent DOFs to be in a certain order and the URDF loader fails to provide this order. I don't know exactly what the expectations of DART are with respect to ordering within its data structures.
In release mode DART skips the sanity check on its data structures. Although it does not report an error in release mode, I assume it would fail to simulate correctly.
I think it's weird that make
builds the test but make test
doesn't. However make test
runs them, so that means that
One of the more common conflicts I've had is that dart's dependencies are linked against libboost 1.46 while everything else tries to link against libboost 1.48. I believe that this is one of the reasons that users can't use the repositories to satisfy dependencies to build dart/grip. Besides, the installation instructions claim that dart requires boost 1.49 or higher, which is clearly not the case because all the debs use boost 1.46.
This problem appears if the 'origin' tag within a 'joint' has a nonzero 'rpy' value.
Here are the details:
URDF allows to specify a (static) transform that defines the joint frame relative to the parent link frame. Then, the joint axis is defined in this joint frame. If the joint value is zero, the joint frame corresponds to the child node frame. The problem only appears if the rotational part of the static transform of the joint frame is unequal zero. For Hubo this is only the case for the fingers.
W.l.o.g. let’s assume we are dealing with a revolute joint. The URDF loader translates this to the DART data structures by creating a joint with 7 transforms: 3 static translation transforms, 3 static rotation transforms and 1 variable rotation transform. The static transforms specify the pose of the joint frame and the variable transform represents the 1-DOF rotation around the joint axis specified in the joint frame.
This would all make sense. However, DART does not support it. DART provides certain joint types and each type expects certain transforms to be specified. DART’s revolute joint allows the specification of static translation transforms to offset the joint frame, but it does not support any rotational transforms other than the one rotation around the joint axis. The Jacobian calculation is done differently for each joint type. The code that calculates the rotational Jacobian for the revolute joint does not transform the Jacobian according to previous rotational transforms that are part of the joint, which leads to incorrect dynamics.
Once I install dart and try to run tabEmpty from grip, I get the following error:
"illegal hardware instruction (core dumped)". gdb does not help and I can run wxWidget and openGL applications successfully in other programs.
In Windows, CMake creates an old version VC++ project file. It needs to be reconverted to the new version and then recompiled again. (Submitted by Tobias)
I created a new app "hanging" to test the point constraints, but I got compiling errors complaining that MyWIndow is an abstract class. I noticed that all the apps now include stdio.h in MyWindow.h, but they don't need it before. With stdio.h, I don't get compiling errors anymore.
When running one of the example apps I get the error message that FreeImage.dll or libglog.dll is missing.
As a workaround I copied those DLLs to the Windows system folder.
For robotics simulations, it would be more physically meaningful to enforce joint limits.
An example. Say we have directories scenes
and scenes/robot
and files scenes/world.urdf
, scenes/object/object.urdf
, and scenes/object/model.dae
. world.urdf includes object/object.urdf using a relative path and object.urdf attempts to include model.dae using another relative path. The parser fails to consider the first relative path and attempts to use a file model.dae
instead of the correct object/model.dae
.
This issue is preventing us from factoring the hubo models out into a separate repository. It should probably be fixed.
Running cmake -DCMAKE_BUILD_TYPE=Debug .
causes cmake
to append d
to library files in dart. There are issues with locating those libraries across dart
, grip
and grip-samples
. Notably, grip-samples
seems to request debug libraries which are not associated with dart
or grip
.
I tried grip-samples/scenes/cubesTab_World.urdf and planningTab_World.urdf
ROS requires FLANN 1.7 while we require 1.8. It seems like it's not possible to install both of them.
What is Shape::mMassTensor? It is not used anywhere. We should probably ask Karen. If there is no use for it, we should remove it together with the functions that generate it.
Currently each node has one shape. That shape can either be a geometric primitive (e.g. a box) or a mesh. In the latter case the shape can include 2 different meshes for collision and visualization.
URDF allows to specify a geometric primitive for collision checking and a mesh for visualization. We could just convert everything into meshes, but that probably makes collision checking slower. Thus, we want each node to have 2 shapes, one for collision and one for visualization. Each shape then represents either a geometric primitive or a single mesh.
Depends on issue #33.
Instead right now it generates an empty solution file
This would make the process of installing and updating dependencies rather cleaner. It would also allow users to install build dart and grip packages using DEBs built using cpack instead of depending on make install (which we all know has caused hours and hours of broken builds in the past).
The preprocessor definition EPSILON in utils/Mish.h collides with the static member variables EPSILON in collision/intersect.h and collision/vec_3f.h.
I am running code that obviously worked on Linux, but on Windows I am getting "error C2059: syntax error : 'constant'".
Workaround: Reorder includes to make sure that utils/Misc.h does not get included before intersect.h and vec_3f.h.
Proposed Solution: We should get rid of global preprocessor definitions.
The URDF loader currently does not provide information whether the scene was loaded successfully. Missing files either cause a crash or, worse, an incomplete data structure that is going to lead to a crash somewhere else in DART.
I'm on a Linux machine. I get the following error while compiling.
[ 1%] Building CXX object src/CMakeFiles/dart.dir/kinematics/Joint.cpp.o
cc1plus: error: unrecognized command line option ‘-stdlib=libc++’
make[2]: *** [src/CMakeFiles/dart.dir/kinematics/Joint.cpp.o] Error 1
make[1]: *** [src/CMakeFiles/dart.dir/all] Error 2
make: *** [all] Error 2
Version 3 and 2 conflict on ubuntu (note that ROS depends on version 2). More details in the attachment file.
Installing assimp from source also fails.
-- Jim Mainprice
Post-Doc at the Arc Lab working on DRC, WPI, MA.
UBUNTU LINUX (12.04) INSTALLING FROM apt-get : Fail
REASON : Conflicting version of ASSIMP 2 and 3
note that the ROS framework depends on version 2
install of the assimp.pc file is the same
for version 2 and 3 of the library which make
the installs incompatible
sudo apt-get install freeglut3 freeglut3-dev libglu1-mesa-dev libboost-all-dev cmake cmake-curses-gui libeigen3-dev libassimp3 libassimp-dev libxmu-dev libxi-dev libwx
Reading package lists... Done
Building dependency tree
Reading state information... Done
Package libassimp3 is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
E: Package 'libassimp3' has no installation candidate
E: Unable to locate package libwx
sudo apt-cache search assimp
assimp-utils - 3D model import library (utilities)
libapache2-authcassimple-perl - Apache2 module to authentificate trough a CAS server
libassimp-dev - 3D model import library (development)
libassimp-doc - 3D model import library (documentation)
libassimp2 - 3D model import library
libassimp2-d-dev - 3D model import library (D bindings)
python-pyassimp - 3D model import library (Python bindings)
assimp - Assimp 3.0.1264 - Open Asset Import Library 3.0.1264
assimp-bin - Assimp 3.0.1264 tools
assimp-dev - Assimp 3.0.1264
libassimp3.0-r1264 - Assimp 3.0.1264 libraries
libassimp3.0-r1264-dev - Assimp 3.0.1264 common headers and installs
sudo apt-get install libassimp3.0-r1264-dev
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
mono-4.0-service mono-runtime-sgen libmono-profiler mono-jay mono-2.0-gac mono-mcs mono-utils mono-2.0-service
Use 'apt-get autoremove' to remove them.
The following NEW packages will be installed:
libassimp3.0-r1264-dev
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B/102 kB of archives.
After this operation, 516 kB of additional disk space will be used.
(Reading database ... 457562 files and directories currently installed.)
Unpacking libassimp3.0-r1264-dev (from .../libassimp3.0-r1264-dev_3.0.1264.10-ubuntu1precise1_amd64.deb) ...precise1_amd64.deb (--unpack):
dpkg: error processing /var/cache/apt/archives/libassimp3.0-r1264-dev_3.0.1264.10-ubuntu1
trying to overwrite '/usr/lib/pkgconfig/assimp.pc', which is also in package libassimp-dev 2.0.863+dfsg-2
dpkg-deb: error: subprocess paste was killed by signal (Broken pipe)
Errors were encountered while processing:
/var/cache/apt/archives/libassimp3.0-r1264-dev_3.0.1264.10-ubuntu1~precise1_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
UBUNTU LINUX (12.04) INSTALL FROM SOURCE : Fail
After installing assimp & tinyxml2 from source
and setting up the path manually to the header folder
in ccmake and having LIBRARY_PATH to point to assimp
installation prefix. 97% of dart was compiled and linked
up to here.
website version : assimp--3.0.1270-source-only.zip
Linking CXX executable ../../../bin/meshCollision
cd /home/jmainpri/workspace/dart/build_clean/apps/meshCollision && /usr/bin/cmake -E cmake_link_script CMakeFiles/meshCollision.dir/link.txt --verbose=1
/usr/bin/c++ -O3 CMakeFiles/meshCollision.dir/MyWindow.cpp.o CMakeFiles/meshCollision.dir/Main.cpp.o -o ../../../bin/meshCollision -rdynamic -L/home/jmainpri/workspace/dart/lib ../../../lib/libdart.a -lccd -lassimp -lglut -lXmu -lXi -lGL -lGLU -lGLU -lGL -lSM -lICE -lX11 -lXext -lfcl -ltinyxml -ltinyxml2 -lboost_system-mt -lboost_filesystem-mt -Wl,-rpath,/home/jmainpri/workspace/dart/lib
../../../lib/libdart.a(ShapeMesh.cpp.o): In function kinematics::ShapeMesh::loadMesh(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': ShapeMesh.cpp:(.text+0x3c2): undefined reference to
aiCreatePropertyStore'
ShapeMesh.cpp:(.text+0x3ea): undefined reference to aiImportFileExWithProperties' ShapeMesh.cpp:(.text+0x3f5): undefined reference to
aiReleasePropertyStore'
collect2: ld returned 1 exit status
make[2]: *** [../bin/meshCollision] Error 1
make[2]: Leaving directory /home/jmainpri/workspace/dart/build_clean' make[1]: *** [apps/meshCollision/CMakeFiles/meshCollision.dir/all] Error 2 make[1]: Leaving directory
/home/jmainpri/workspace/dart/build_clean'
make: *** [all] Error 2
This is the same issue I emailed about earlier.
This is the CMake output on windows:
Generate makefile/project file for DART
CMAKE_SOURCE_DIR = D:/Tobias_2/Code Repositories/dart
CMAKE_BINARY_DIR = D:/Tobias_2/Code Repositories/dart/build
Setup Visual Studio Specific Flags
Generate the path header file to D:/Tobias_2/Code Repositories/dart/src/utils/Paths.h
Defaulting to provided GLUT libraries. Change GLUT_PREFIX_PATH to use a different version of GLUT
Boost version: 1.51.0
Found the following Boost libraries:
system
filesystem
Could not find flann
Could not find ccd
Could not fcl
Could NOT find DARTExt (missing: DARTExt_FOUND)
Dart dependencies were not satisfied, will not build from source
Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE)
Configuring done
Generating done
I installed DART on Ubuntu 12.04. The grip-samples CMake script failed because it could not find assimp. libassimp-dev was shown in synaptic as upgradable but I had to manually upgrade it in order for grip-samples to work.
Hi all,
I am trying to install DART/Grip from source on a Ubuntu 12.04 (64 bit) and have followed all the steps mentioned here:
https://github.com/golems/dart/wiki/Linux-installation
But I couldn't install the dart due to following reasons:
$$ cmake .
-- Generate makefile/project file for DART
-- CMAKE_SOURCE_DIR = /home/oarslan/git/dart
-- CMAKE_BINARY_DIR = /home/oarslan/git/dart
-- Generate the path header file to /home/oarslan/git/dart/src/utils/Paths.h
-- EIGEN3_INCLUDEDIR = /usr/include/eigen3
-- Boost version: 1.46.1
-- Found the following Boost libraries:
-- system
-- filesystem
-- FLANN_INCLUDEDIR = /usr/include
-- CCD_INCLUDEDIR = /usr/include
-- FCL_INCLUDEDIR = /usr/include
-- ASSIMP_INCLUDEDIR = /usr/include
-- MATHPLOT = MATHPLOT_INCLUDE_DIR-NOTFOUND
-- Building DART source
-- Adding test: testKinematics
-- Adding test: testNearestNeighbor
-- Adding test: testForwardKinematics
-- Adding test: testDynamics
-- Adding test: testUtilities
-- Adding test: testOptimizer
-- Configuring done
-- Generating done
-- Build files have been written to: /home/oarslan/git/dart
$$ make
../lib/libdart.a(ParserVsk.cpp.o): In function readVSKFile(char const*, kinematics::Skeleton*)': ParserVsk.cpp:(.text+0x9e26): undefined reference to
tinyxml2::XMLDocument::XMLDocument(bool, tinyxml2::Whitespace)'
collect2: ld returned 1 exit status
make[2]: *** [bin/tests/testDynamics] Error 1
make[1]: *** [unittests/CMakeFiles/testDynamics.dir/all] Error 2
make: *** [all] Error 2
It seems there is a problem with tinyxml2 library, but I am sure that I installed it correctly.
Here are the terminal outputs for installation of the tinyxml2.
$$ cmake
-- Configuring done
-- Generating done
-- Build files have been written to: /home/oarslan/git/tinyxml2
$$ make
In source build
[ 0%] Built target DATA_COPY
[ 33%] Built target tinyxml2
[ 66%] Built target test
[100%] Built target tinyxml2static
Install the project...
-- Install configuration: ""
-- Up-to-date: /usr/local/lib/x86_64-linux-gnu/libtinyxml2.so.1.0.11
-- Up-to-date: /usr/local/lib/x86_64-linux-gnu/libtinyxml2.so.1
-- Up-to-date: /usr/local/lib/x86_64-linux-gnu/libtinyxml2.so
-- Up-to-date: /usr/local/lib/x86_64-linux-gnu/libtinyxml2.a
-- Up-to-date: /usr/local/include/tinyxml2.h
-- Up-to-date: /usr/local/lib/x86_64-linux-gnu/pkgconfig/tinyxml2.pc
$$ sudo make install
In source build
[ 0%] Built target DATA_COPY
[ 33%] Built target tinyxml2
[ 66%] Built target test
[100%] Built target tinyxml2static
Install the project...
-- Install configuration: ""
-- Up-to-date: /usr/local/lib/x86_64-linux-gnu/libtinyxml2.so.1.0.11
-- Up-to-date: /usr/local/lib/x86_64-linux-gnu/libtinyxml2.so.1
-- Up-to-date: /usr/local/lib/x86_64-linux-gnu/libtinyxml2.so
-- Up-to-date: /usr/local/lib/x86_64-linux-gnu/libtinyxml2.a
-- Up-to-date: /usr/local/include/tinyxml2.h
-- Up-to-date: /usr/local/lib/x86_64-linux-gnu/pkgconfig/tinyxml2.pc
Does anyone have a guess why I am getting this error?
Thanks
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.