Intel RealsenseId Python wrappers compile in Ubuntu - realsense

I have spent the day trying to get this to build and was hoping someone can help or point me to the right direction.
Using Ubuntu 18.
Python 3.9.13
Gcc 7.5.0
cmake 3.10.2
I have created the build directory and within that directory run the command:
cmake .. -DRSID_PREVIEW=ON -DRSID_SECURE=ON -DRSID_PY=ON
Make files build ok. I then typed:
make
Most of the binaries are compiled such as rsid_cli. However I get the error below which prevents the python wrappers from being built. Can anyone help?
Scanning dependencies of target rsid_py
[ 96%] Building CXX object wrappers/python/CMakeFiles/rsid_py.dir/rsid_py.cc.o
[ 97%] Building CXX object wrappers/python/CMakeFiles/rsid_py.dir/face_auth_py.cc.o
In file included from /usr/include/c++/7/memory:80:0,
from /home/rukshan/Desktop/RealSenseID-0.25.0/build/3rdparty/pybind11/include/pybind11/detail/common.h:162,
from /home/rukshan/Desktop/RealSenseID-0.25.0/build/3rdparty/pybind11/include/pybind11/pytypes.h:12,
from /home/rukshan/Desktop/RealSenseID-0.25.0/build/3rdparty/pybind11/include/pybind11/cast.h:13,
from /home/rukshan/Desktop/RealSenseID-0.25.0/build/3rdparty/pybind11/include/pybind11/attr.h:13,
from /home/rukshan/Desktop/RealSenseID-0.25.0/build/3rdparty/pybind11/include/pybind11/pybind11.h:45,
from /home/rukshan/Desktop/RealSenseID-0.25.0/wrappers/python/rsid_py.h:6,
from /home/rukshan/Desktop/RealSenseID-0.25.0/wrappers/python/face_auth_py.cc:7:
/usr/include/c++/7/bits/unique_ptr.h: In instantiation of ‘typename std::_MakeUniq<_Tp>::__single_object std::make_unique(_Args&& ...) [with _Tp = RealSenseID::FaceAuthenticator; _Args = {}; typename std::_MakeUniq<_Tp>::_single_object = std::unique_ptr<RealSenseID::FaceAuthenticator, std::default_deleteRealSenseID::FaceAuthenticator >]’:
/home/rukshan/Desktop/RealSenseID-0.25.0/wrappers/python/face_auth_py.cc:596:58: required from here
/usr/include/c++/7/bits/unique_ptr.h:821:30: error: no matching function for call to ‘RealSenseID::FaceAuthenticator::FaceAuthenticator()’
{ return unique_ptr<Tp>(new Tp(std::forward<Args>(args)...)); }
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /home/rukshan/Desktop/RealSenseID-0.25.0/wrappers/python/face_auth_py.cc:5:0:
/home/rukshan/Desktop/RealSenseID-0.25.0/src/../include/RealSenseID/FaceAuthenticator.h:39:14: note: candidate: RealSenseID::FaceAuthenticator::FaceAuthenticator(RealSenseID::SignatureCallback*)
explicit FaceAuthenticator(SignatureCallback* callback);
^~~~~~~~~~~~~~~~~
/home/rukshan/Desktop/RealSenseID-0.25.0/src/../include/RealSenseID/FaceAuthenticator.h:39:14: note: candidate expects 1 argument, 0 provided
In file included from /home/rukshan/Desktop/RealSenseID-0.25.0/build/3rdparty/pybind11/include/pybind11/pybind11.h:48:0,
from /home/rukshan/Desktop/RealSenseID-0.25.0/wrappers/python/rsid_py.h:6,
from /home/rukshan/Desktop/RealSenseID-0.25.0/wrappers/python/face_auth_py.cc:7:
/home/rukshan/Desktop/RealSenseID-0.25.0/build/3rdparty/pybind11/include/pybind11/detail/init.h: In instantiation of ‘Class* pybind11::detail::initimpl::construct_or_initialize(Args&& ...) [with Class = RealSenseID::FaceAuthenticator; Args = {}; typename std::enable_if<(! std::is_constructible<Tp, Args>::value), int>::type = 0]’:
/home/rukshan/Desktop/RealSenseID-0.25.0/build/3rdparty/pybind11/include/pybind11/detail/init.h:175:66: required from ‘pybind11::detail::initimpl::constructor::execute(Class&, const Extra& ...)::<lambda(pybind11::detail::value_and_holder&, Args ...)> [with Class = pybind11::classRealSenseID::FaceAuthenticator; Extra = {}; typename std::enable_if<(! Class:: has_alias), int>::type = 0; Args = {}]’
/home/rukshan/Desktop/RealSenseID-0.25.0/build/3rdparty/pybind11/include/pybind11/detail/init.h:174:29: required from ‘struct pybind11::detail::initimpl::constructor::execute(Class&, const Extra& ...) [with Class = pybind11::classRealSenseID::FaceAuthenticator; Extra = {}; typename std::enable_if<(! Class:: has_alias), int>::type = 0; Args = {}]::<lambda(struct pybind11::detail::value_and_holder&)>’
/home/rukshan/Desktop/RealSenseID-0.25.0/build/3rdparty/pybind11/include/pybind11/detail/init.h:174:9: required from ‘static void pybind11::detail::initimpl::constructor::execute(Class&, const Extra& ...) [with Class = pybind11::classRealSenseID::FaceAuthenticator; Extra = {}; typename std::enable_if<(! Class:: has_alias), int>::type = 0; Args = {}]’
/home/rukshan/Desktop/RealSenseID-0.25.0/build/3rdparty/pybind11/include/pybind11/pybind11.h:1346:9: required from ‘pybind11::class<type, options>& pybind11::class<type, options>::def(const pybind11::detail::initimpl::constructor<Args ...>&, const Extra& ...) [with Args = {}; Extra = {}; type = RealSenseID::FaceAuthenticator; options = {}]’
/home/rukshan/Desktop/RealSenseID-0.25.0/wrappers/python/face_auth_py.cc:594:26: required from here
/home/rukshan/Desktop/RealSenseID-0.25.0/build/3rdparty/pybind11/include/pybind11/detail/init.h:63:64: error: no matching function for call to ‘RealSenseID::FaceAuthenticator::FaceAuthenticator()’
inline Class construct_or_initialize(Args &&...args) { return new Class{std::forward(args)...}; }
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /home/rukshan/Desktop/RealSenseID-0.25.0/wrappers/python/face_auth_py.cc:5:0:
/home/rukshan/Desktop/RealSenseID-0.25.0/src/../include/RealSenseID/FaceAuthenticator.h:39:14: note: candidate: RealSenseID::FaceAuthenticator::FaceAuthenticator(RealSenseID::SignatureCallback)
explicit FaceAuthenticator(SignatureCallback* callback);
^~~~~~~~~~~~~~~~~
/home/rukshan/Desktop/RealSenseID-0.25.0/src/../include/RealSenseID/FaceAuthenticator.h:39:14: note: candidate expects 1 argument, 0 provided
wrappers/python/CMakeFiles/rsid_py.dir/build.make:86: recipe for target 'wrappers/python/CMakeFiles/rsid_py.dir/face_auth_py.cc.o' failed
make[2]: *** [wrappers/python/CMakeFiles/rsid_py.dir/face_auth_py.cc.o] Error 1
CMakeFiles/Makefile2:1388: recipe for target 'wrappers/python/CMakeFiles/rsid_py.dir/all' failed
make[1]: *** [wrappers/python/CMakeFiles/rsid_py.dir/all] Error 2
Makefile:129: recipe for target 'all' failed
make: *** [all] Error 2

Related

CMake failed to link submodule, undefined reference [duplicate]

This question already has answers here:
Why can templates only be implemented in the header file?
(17 answers)
Closed 14 days ago.
I don't know why error appears, i use target_link_libraries
c:/dev-tools/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\submoduleTest1.dir/objects.a(main.cpp.obj):main.cpp:(.text.startup+0x2c): undefined reference to `void fmt_println2<char [5]>(char const (&) [5])'
collect2.exe: error: ld returned 1 exit status
mingw32-make[3]: *** [CMakeFiles\submoduleTest1.dir\build.make:101: submoduleTest1.exe] Error 1
mingw32-make[2]: *** [CMakeFiles\Makefile2:99: CMakeFiles/submoduleTest1.dir/all] Error 2
mingw32-make[1]: *** [CMakeFiles\Makefile2:106: CMakeFiles/submoduleTest1.dir/rule] Error 2
mingw32-make: *** [Makefile:123: submoduleTest1] Error 2
Main CMake:
cmake_minimum_required(VERSION 3.24)
project(submoduleTest1)
add_subdirectory(fmt_formatter)
set(CMAKE_CXX_STANDARD 17)
add_executable(submoduleTest1 main.cpp)
target_link_libraries(submoduleTest1 fmt_formatter)
fmt_formatter CMake:
find_package(fmt CONFIG REQUIRED)
add_library(fmt_formatter STATIC fmt_formatter.cpp fmt_formatter.h)
target_link_libraries(fmt_formatter fmt::fmt)
fmt_formatter.cpp
#include "fmt_formatter.h"
template<typename... Args>
void fmt_println(const fmt::text_style &ts, bool color, const Args &... args) {
fmt::print(color ? ts : fmt::text_style(), args...);
fmt::print("\n");
fflush(stdout);
}
template<typename... Args>
void fmt_println2(const Args &... args) {
fmt::print(fmt::text_style(), args...);
fmt::print("\n");
fflush(stdout);
}
fmt_formatter.h
#include "fmt/core.h"
#include "fmt/color.h"
template<typename... Args>
void fmt_println(const fmt::text_style &ts, bool color = true, const Args &... args);
template<typename... Args>
void fmt_println2(const Args &... args);
main.cpp
#include <iostream>
#include "fmt_formatter/fmt_formatter.h"
int main() {
std::cout << "Hello, World!" << std::endl;
fmt_println2("test");
return 0;
}
Any ideas how can i solve it? I tried many solutions but any of them worked.
Move your template function definitions to the header file. For a template to be instantiated at compile time, the definition needs to be visible at that point, which it isn't if you put it in a cpp file and not the hpp file that gets included where the instantiation is happening.
For more info, see Why can templates only be implemented in the header file?

Running an C++ exetuable with embedded python

I am on Windows 10, having installed WinPython 64 3.8.5 and Mingw w64.
I want to call python code from C++ and started using the following example code:
#define PY_SSIZE_T_CLEAN
#include <Python.h>
int main(int argc, char *argv[])
{
wchar_t *program = Py_DecodeLocale(argv[0], NULL);
if (program == NULL) {
fprintf(stderr, "Fatal error: cannot decode argv[0]\n");
exit(1);
}
Py_SetProgramName(program); /* optional but recommended */
Py_Initialize();
PyRun_SimpleString("from time import time,ctime\n"
"print('Today is', ctime(time()))\n");
if (Py_FinalizeEx() < 0) {
exit(120);
}
PyMem_RawFree(program);
return 0;
}
Compilation runs through smoothly (g++ myfile.cpp -Ipath/to/Python.h -Lpath/to/python38.lib -lpython38)
However, when running the exe in cmd (after running C:\Users\liebschs\Programs\WinPython64-3.8.5\WPy64-3850\scripts\env.batch in that cmd), I obtain the following error:
Python path configuration:
PYTHONHOME = (not set)
PYTHONPATH = (not set)
program name = 'embed.exe'
isolated = 0
environment = 1
user site = 1
import site = 1
sys._base_executable = 'C:\\Users\\liebschs\\MyFiles\\playground\\VSprojects\\EmbedPython\\embed.exe'
sys.base_prefix = 'C:\\Users\\liebschs\\Programs\\WinPython64-3.8.5\\WPy64-3850\\python-3.8.5.amd64'
sys.base_exec_prefix = 'C:\\Users\\liebschs\\Programs\\WinPython64-3.8.5\\WPy64-3850\\python-3.8.5.amd64'
sys.executable = 'C:\\Users\\liebschs\\MyFiles\\playground\\VSprojects\\EmbedPython\\embed.exe'
sys.prefix = 'C:\\Users\\liebschs\\Programs\\WinPython64-3.8.5\\WPy64-3850\\python-3.8.5.amd64'
sys.exec_prefix = 'C:\\Users\\liebschs\\Programs\\WinPython64-3.8.5\\WPy64-3850\\python-3.8.5.amd64'
sys.path = [
'C:\\Users\\liebschs\\Programs\\WinPython64-3.8.5\\WPy64-3850\\python-3.8.5.amd64\\python38.zip',
'.\\DLLs',
'.\\lib',
'C:\\Users\\liebschs\\MyFiles\\playground\\VSprojects\\EmbedPython',
]
Fatal Python error: init_fs_encoding: failed to get the Python codec of the filesystem encoding
Python runtime state: core initialized
ModuleNotFoundError: No module named 'encodings'
Current thread 0x000021c8 (most recent call first):
<no Python frame>
Any help is appreciated!
Btw:
Running python scripts directly (i.e. doing "python helloworld.py" in cmd) or using pip does not cause an error and runs as expected.
switching to a virtual environment, does not change anything
Contrary to what I read elsewhere, the problem is resolved when I set PYTHONPATH and PYTHONHOME to the python.exe, in my case C:\Users\liebschs\Programs\WinPython64-3.8.5\WPy64-3850\python-3.8.5.amd64

How do you import a proto file from outside your project with CMake?

I have a library that is basically just a bunch of proto files in /usr/include/ignition/msgs1/ignition/msgs. I am trying to make a custom message that uses ignition::msgs::Vector3d and ignition::msgs::Quaternion.
Here is my state.proto
syntax = "proto2";
package cdrone.messages;
import "quaternion.proto";
import "vector3d.proto";
message State
{
required int64 time = 1;
required Vector3d position = 2;
required Vector3d velocity = 3;
required Quaternion attitude = 4;
required Vector3d angular_velocity = 5;
}
Here is the CMakeLists.txt I am using to compile the protobufs:
include_directories(${PROTOBUF_INCLUDE_DIRS})
set(PROTOBUF_INCLUDE_DIRS ${PROTOBUF_INCLUDE_DIRS} "/usr/include/ignition/msgs1/ignition/msgs")
set(ProtoFiles
gamepad.proto
motor_power.proto
/usr/include/ignition/msgs1/ignition/msgs/vector3d.proto
/usr/include/ignition/msgs1/ignition/msgs/quaternion.proto
state.proto)
PROTOBUF_GENERATE_CPP(ProtoSources ProtoHeaders ${ProtoFiles})
add_library(messages SHARED ${ProtoSources})
target_link_libraries(messages ${PROTOBUF_LIBRARY})
It looks like it finds the vector3d.proto and quaternion.proto, but when it tries to import another proto inside either vector3d.proto or quaternion.proto, it fails to find that new import.
$ make
[ 5%] Built target cpptoml-parser
[ 10%] Built target cpptoml-build
[ 15%] Built target cpptoml-conversions
[ 21%] Built target parse
[ 23%] Running C++ protocol buffer compiler on state.proto
ignition/msgs/header.proto: File not found.
quaternion.proto: Import "ignition/msgs/header.proto" was not found or had errors.
quaternion.proto:32:12: "Header" is not defined.
vector3d.proto: Import "ignition/msgs/header.proto" was not found or had errors.
vector3d.proto:32:12: "Header" is not defined.
state.proto: Import "quaternion.proto" was not found or had errors.
state.proto: Import "vector3d.proto" was not found or had errors.
state.proto:12:12: "Vector3d" is not defined.
state.proto:13:12: "Vector3d" is not defined.
state.proto:14:12: "Quaternion" is not defined.
state.proto:15:12: "Vector3d" is not defined.
src/common/messages/CMakeFiles/messages.dir/build.make:94: recipe for target 'src/common/messages/state.pb.cc' failed
make[2]: *** [src/common/messages/state.pb.cc] Error 1
CMakeFiles/Makefile2:413: recipe for target 'src/common/messages/CMakeFiles/messages.dir/all' failed
make[1]: *** [src/common/messages/CMakeFiles/messages.dir/all] Error 2
Makefile:151: recipe for target 'all' failed
make: *** [all] Error 2

Build aruco 2.0.5 on Windows 8

I am trying to install aruco on my Windows machine using cmake 3.5.2 as suggested by the aruco developper.
My config:
Windows8
CMake 3.5.2
ArUco 2.0.5
I can configure and generate successfully aruco in cmake.
Then I go to aruco\build -> right click-> open cmd -> type mingw32-make -> get the following error:
C:\aruco-2.0.5\build>mingw32-make
Scanning dependencies of target aruco
[ 2%] Building CXX object src/CMakeFiles/aruco.dir/ar_omp.cpp.obj
[ 4%] Building CXX object src/CMakeFiles/aruco.dir/cameraparameters.cpp.obj
[ 6%] Building CXX object src/CMakeFiles/aruco.dir/cvdrawingutils.cpp.obj
In file included from C:\aruco-2.0.5\src\aruco.h:149:0,
from C:\aruco-2.0.5\src\cvdrawingutils.h:31,
from C:\aruco-2.0.5\src\cvdrawingutils.cpp:28:
C:\aruco-2.0.5\src\markerdetector.h:160:40: warning: "/*" within comment [-Wcomm
ent]
ARUCO_MIP_36h12, //**** recommended
^
C:\aruco-2.0.5\src\markerdetector.h:212:60: warning: unused parameter 'r2' [-Wun
used-parameter]
void setThresholdParamRange(size_t r1 = 0, size_t r2 = 0) {_params. _thresP
aram1_range = r1; }
^
C:\aruco-2.0.5\src\markerdetector.h:267:30: warning: unused parameter 'val' [-Wu
nused-parameter]
void setDesiredSpeed(int val){}
^
In file included from C:\aruco-2.0.5\src\posetracker.h:33:0,
from C:\aruco-2.0.5\src\aruco.h:150,
from C:\aruco-2.0.5\src\cvdrawingutils.h:31,
from C:\aruco-2.0.5\src\cvdrawingutils.cpp:28:
C:\aruco-2.0.5\src\markermap.h: In member function 'void aruco::Marker3DInfo::to
Stream(std::ostream&)':
C:\aruco-2.0.5\src\markermap.h:49:77: warning: comparison between signed and uns
igned integer expressions [-Wsign-compare]
void toStream(std::ostream &str){str<<id<<" "<<size()<<" ";for(int i=0;i<si
ze();i++) str<<at(i).x<<" "<<at(i).y<<" "<<at(i).z<<" ";}
^
In file included from C:\aruco-2.0.5\src\posetracker.h:33:0,
from C:\aruco-2.0.5\src\aruco.h:150,
from C:\aruco-2.0.5\src\cvdrawingutils.h:31,
from C:\aruco-2.0.5\src\cvdrawingutils.cpp:28:
C:\aruco-2.0.5\src\markermap.h: In member function 'void aruco::Marker3DInfo::fr
omStream(std::istream&)':
C:\aruco-2.0.5\src\markermap.h:50:80: warning: comparison between signed and uns
igned integer expressions [-Wsign-compare]
void fromStream(std::istream &str){int s;str>>id>>s;resize(s);for(int i=0;i
<size();i++) str>>at(i).x>>at(i).y>>at(i).z;}
^
[ 9%] Building CXX object src/CMakeFiles/aruco.dir/dictionary.cpp.obj
In file included from C:\aruco-2.0.5\src\dictionary.cpp:9:0:
C:\aruco-2.0.5\src\markermap.h: In member function 'void aruco::Marker3DInfo::to
Stream(std::ostream&)':
C:\aruco-2.0.5\src\markermap.h:49:77: warning: comparison between signed and uns
igned integer expressions [-Wsign-compare]
void toStream(std::ostream &str){str<<id<<" "<<size()<<" ";for(int i=0;i<si
ze();i++) str<<at(i).x<<" "<<at(i).y<<" "<<at(i).z<<" ";}
^
In file included from C:\aruco-2.0.5\src\dictionary.cpp:9:0:
C:\aruco-2.0.5\src\markermap.h: In member function 'void aruco::Marker3DInfo::fr
omStream(std::istream&)':
C:\aruco-2.0.5\src\markermap.h:50:80: warning: comparison between signed and uns
igned integer expressions [-Wsign-compare]
void fromStream(std::istream &str){int s;str>>id>>s;resize(s);for(int i=0;i
<size();i++) str>>at(i).x>>at(i).y>>at(i).z;}
^
C:\aruco-2.0.5\src\dictionary.cpp: In static member function 'static std::string
aruco::Dictionary::getTypeString(aruco::Dictionary::DICT_TYPES)':
C:\aruco-2.0.5\src\dictionary.cpp:236:11: warning: enumeration value 'ARTAG' not
handled in switch [-Wswitch]
switch(t){
^
C:\aruco-2.0.5\src\dictionary.cpp: In member function 'aruco::MarkerMap aruco::D
ictionary::createMarkerMap(cv::Size, int, int, const std::vector<int>&, bool)':
C:\aruco-2.0.5\src\dictionary.cpp:275:39: warning: comparison between signed and
unsigned integer expressions [-Wsign-compare]
if (gridSize.height*gridSize.width!=ids.size())throw cv::Exception(9001, "g
ridSize != ids.size()Invalid ", "Dictionary::createMarkerMap", __FILE__, __LINE_
_);
^
C:\aruco-2.0.5\src\dictionary.cpp:284:23: warning: comparison between signed and
unsigned integer expressions [-Wsign-compare]
for (int i=0;i<ids.size();i++) TInfo[i].id=ids[i];
^
C:\aruco-2.0.5\src\dictionary.cpp:285:13: warning: unused variable 'sizeY' [-Wun
used-variable]
int sizeY=gridSize.height*MarkerSize+(gridSize.height-1)*MarkerDistance
;
^
C:\aruco-2.0.5\src\dictionary.cpp:286:13: warning: unused variable 'sizeX' [-Wun
used-variable]
int sizeX=gridSize.width*MarkerSize+(gridSize.width-1)*MarkerDistance;
^
C:\aruco-2.0.5\src\dictionary.cpp:312:37: warning: comparison between signed and
unsigned integer expressions [-Wsign-compare]
if (CurMarkerIdx>=ids.size()) throw cv::Exception(999," Fid
ucidalMarkers::createMarkerMapImage_ChessMarkerMap","INTERNAL ERROR. REWRITE THI
S!!",__FILE__,__LINE__);
^
C:\aruco-2.0.5\src\dictionary.cpp:300:13: warning: unused variable 'centerX' [-W
unused-variable]
int centerX=sizeX/2;
^
C:\aruco-2.0.5\src\dictionary.cpp:301:13: warning: unused variable 'centerY' [-W
unused-variable]
int centerY=sizeY/2;
^
C:\aruco-2.0.5\src\dictionary.cpp:303:14: warning: unused variable 'centerData'
[-Wunused-variable]
bool centerData=true;
^
[ 11%] Building CXX object src/CMakeFiles/aruco.dir/ippe.cpp.obj
C:\aruco-2.0.5\src\ippe.cpp: In function 'void IPPE::IPPComputeRotations(double,
double, double, double, double, double, cv::OutputArray, cv::OutputArray)':
C:\aruco-2.0.5\src\ippe.cpp:307:45: warning: variable 'ata10' set but not used [
-Wunused-but-set-variable]
double a00, a01, a10,a11, ata00, ata01, ata10,ata11,b00, b01, b10,b11,binv0
0, binv01, binv10,binv11;
^
C:\aruco-2.0.5\src\ippe.cpp:311:19: warning: variable 'a' set but not used [-Wun
used-but-set-variable]
double b0, b1,a,gamma,dtinv;
^
[ 13%] Building CXX object src/CMakeFiles/aruco.dir/marker.cpp.obj
C:\aruco-2.0.5\src\marker.cpp: In member function 'void aruco::Marker::rotateXAx
is(cv::Mat&)':
C:\aruco-2.0.5\src\marker.cpp:299:22: error: 'M_PI' was not declared in this sco
pe
float angleRad = M_PI / 2;
^
src\CMakeFiles\aruco.dir\build.make:187: recipe for target 'src/CMakeFiles/aruco
.dir/marker.cpp.obj' failed
mingw32-make[2]: *** [src/CMakeFiles/aruco.dir/marker.cpp.obj] Error 1
CMakeFiles\Makefile2:116: recipe for target 'src/CMakeFiles/aruco.dir/all' faile
d
mingw32-make[1]: *** [src/CMakeFiles/aruco.dir/all] Error 2
Makefile:126: recipe for target 'all' failed
mingw32-make: *** [all] Error 2
C:\aruco-2.0.5\build>mingw32-make
Scanning dependencies of target aruco
[ 2%] Building CXX object src/CMakeFiles/aruco.dir/marker.cpp.obj
C:\aruco-2.0.5\src\marker.cpp: In member function 'void aruco::Marker::rotateXAx
is(cv::Mat&)':
C:\aruco-2.0.5\src\marker.cpp:299:22: error: 'M_PI' was not declared in this sco
pe
float angleRad = M_PI / 2;
^
src\CMakeFiles\aruco.dir\build.make:187: recipe for target 'src/CMakeFiles/aruco
.dir/marker.cpp.obj' failed
mingw32-make[2]: *** [src/CMakeFiles/aruco.dir/marker.cpp.obj] Error 1
CMakeFiles\Makefile2:116: recipe for target 'src/CMakeFiles/aruco.dir/all' faile
d
mingw32-make[1]: *** [src/CMakeFiles/aruco.dir/all] Error 2
Makefile:126: recipe for target 'all' failed
mingw32-make: *** [all] Error 2
I have also tried to do it with codeblocks but I get the exact same error.
The developer has released a new version 2.0.7 fixing this issue.
What I have done to have aruco:
download the .zip on sourceforge
unzip it
create a build folder in aruco-2.0.7
open cmake-gui configure and generate
go into your build folder
open a cmd window from there
type mingw32-make
The library should have compiled properly.
If omp.h is missing from your compiler, find the source code on the internet and add it to mingw in MinGW\include. You should be ready to go. Don't forget to add aruco to your path & reboot.
If you are using an ide, you will have to add this library since it is an external library but it is another issue.
Finally, you might have some issues regarding c++11. I am working on it. If someone knows how to allow it on mingw (I haven't find any understandable explanation so far)

How to build dash with CMake?

I'm trying to build dash using Clion and CMake but I get this build error:
/opt/clion-2016.1.1/bin/cmake/bin/cmake --build /home/dac/.CLion2016.1/system/cmake/generated/dash-46b33cad/46b33cad/Debug --target all -- -j 4
[ 3%] Building C object CMakeFiles/main.dir/error.c.o
[ 6%] Building C object CMakeFiles/main.dir/eval.c.o
[ 9%] Building C object CMakeFiles/main.dir/cd.c.o
[ 12%] Building C object CMakeFiles/main.dir/arith_yylex.c.o
In file included from /home/dac/Downloads/dash-0.5.8/dash/error.c:54:0:
/home/dac/Downloads/dash-0.5.8/dash/system.h:65:22: error: static declaration of ‘strtod’ follows non-static declaration
static inline double strtod(const char *nptr, char **endptr)
^
In file included from /home/dac/Downloads/dash-0.5.8/dash/error.c:40:0:
/usr/include/stdlib.h:164:15: note: previous declaration of ‘strtod’ was here
extern double strtod (const char *__restrict __nptr,
^
In file included from /home/dac/Downloads/dash-0.5.8/dash/error.c:54:0:
/home/dac/Downloads/dash-0.5.8/dash/system.h:86:19: error: static declaration of ‘killpg’ follows non-static declaration
static inline int killpg(pid_t pid, int signal)
^
In file included from /home/dac/Downloads/dash-0.5.8/dash/error.c:39:0:
/usr/include/signal.h:134:12: note: previous declaration of ‘killpg’ was here
extern int killpg (__pid_t __pgrp, int __sig) __THROW;
^
In file included from /home/dac/Downloads/dash-0.5.8/dash/error.c:54:0:
/home/dac/Downloads/dash-0.5.8/dash/system.h:97:0: warning: "_SC_CLK_TCK" redefined
#define _SC_CLK_TCK 2
^
In file included from /usr/include/unistd.h:609:0,
from /home/dac/Downloads/dash-0.5.8/dash/error.c:42:
/usr/include/x86_64-linux-gnu/bits/confname.h:78:0: note: this is the location of the previous definition
#define _SC_CLK_TCK _SC_CLK_TCK
^
CMakeFiles/main.dir/build.make:182: recipe for target 'CMakeFiles/main.dir/error.c.o' failed
make[2]: *** [CMakeFiles/main.dir/error.c.o] Error 1
make[2]: *** Waiting for unfinished jobs....
/home/dac/Downloads/dash-0.5.8/dash/eval.c:51:22: fatal error: builtins.h: No such file or directory
In file included from /home/dac/Downloads/dash-0.5.8/dash/arith_yylex.c:44:0:
/home/dac/Downloads/dash-0.5.8/dash/system.h:65:22: error: static declaration of ‘strtod’ follows non-static declaration
static inline double strtod(const char *nptr, char **endptr)
^
In file included from /home/dac/Downloads/dash-0.5.8/dash/arith_yylex.c:36:0:
/usr/include/stdlib.h:164:15: note: previous declaration of ‘strtod’ was here
extern double strtod (const char *__restrict __nptr,
^
In file included from /home/dac/Downloads/dash-0.5.8/dash/arith_yylex.c:44:0:
/home/dac/Downloads/dash-0.5.8/dash/system.h:86:19: error: static declaration of ‘killpg’ follows non-static declaration
static inline int killpg(pid_t pid, int signal)
^
In file included from /home/dac/Downloads/dash-0.5.8/dash/error.h:38:0,
from /home/dac/Downloads/dash-0.5.8/dash/arith_yylex.c:40:
/usr/include/signal.h:134:12: note: previous declaration of ‘killpg’ was here
extern int killpg (__pid_t __pgrp, int __sig) __THROW;
^
In file included from /home/dac/Downloads/dash-0.5.8/dash/syntax.h:5:0,
from /home/dac/Downloads/dash-0.5.8/dash/arith_yylex.c:43:
/home/dac/Downloads/dash-0.5.8/dash/system.h:102:17: error: expected ‘)’ before ‘c’
int isblank(int c);
^
/home/dac/Downloads/dash-0.5.8/dash/system.h:102:5: error: expected expression before ‘)’ token
int isblank(int c);
^
compilation terminated.
CMakeFiles/main.dir/build.make:206: recipe for target 'CMakeFiles/main.dir/eval.c.o' failed
make[2]: *** [CMakeFiles/main.dir/eval.c.o] Error 1
CMakeFiles/main.dir/build.make:134: recipe for target 'CMakeFiles/main.dir/arith_yylex.c.o' failed
make[2]: *** [CMakeFiles/main.dir/arith_yylex.c.o] Error 1
My CMakeLists.txt looks like this:
cmake_minimum_required (VERSION 2.6)
project (dash)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -include config.h -DBSD=1 -DSHELL -DIFS_BROKEN")
add_executable(main main.c alias.c arith_yacc.c arith_yylex.c cd.c error.c eval.c exec.c expand.c histedit.c input.c jobs.c mail.c main.c memalloc.c miscbltin.c mystring.c options.c parser.c redir.c show.c trap.c output.c bltin/printf.c system.c bltin/test.c bltin/times.c var.c alias.h arith_yacc.h bltin/bltin.h cd.h error.h eval.h exec.h expand.h hetio.h init.h input.h jobs.h machdep.h mail.h main.h memalloc.h miscbltin.h myhistedit.h mystring.h options.h output.h parser.h redir.h shell.h show.h system.h trap.h var.h mktokens mkbuiltins builtins.def.in mkinit.c mknodes.c nodetypes nodes.c.pat mksyntax.c mksignames.c)
What can I do to make it build? If I use the makefile and build with make then it builds. But I want to build with CMake.