Compiler unable to link/find GLFW [duplicate] - c++

This question already has answers here:
How do I link GLFW
(3 answers)
Closed 4 years ago.
I am trying to run a modified program that can be found at cpp-pointcloud.cpp. I am having difficulties getting it to build.
As it is now my file structure is:
-pointcloud.cpp
-librealsense/
-examples
-example.hpp
And I am building it with the command:
g++ -std=c++11 pointcloud.cpp -lrealsense -lopencv_core -lopencv_imgproc -lopencv_highgui -o ir
The imports of the pointcloud.cpp file are as follows:
// License: Apache 2.0. See LICENSE file in root directory.
// Copyright(c) 2015 Intel Corporation. All Rights Reserved.
#include <librealsense/rs.hpp>
#include <librealsense2/rs.hpp>
#include "librealsense/examples/example.hpp"
#include <chrono>
#include <vector>
#include <sstream>
#include <iostream>
#include <algorithm>
And they are:
#pragma once
#define GLFW_INCLUDE_GLU
#include <GLFW/glfw3.h>
#include <vector>
#include <string>
#include <sstream>
#include <iostream>
#include <algorithm>
In the example.hpp file.
My issue is that it cannot seem to find the glfw files. I get a bunch of errors like:
pointcloud.cpp:(.text+0xdf5): undefined reference to `glPopMatrix'
Which is bizarre to me as I'm confident that i've installed the GLFW3 package. And I believed that includes that use the angle brackets search for installed packages on your operating system.
I've ran this command successfully:
sudo apt-get install libglfw3 libglfw3-dev
I tried adding
#include <GLFW/glfw3.h>
to the pointcloud.cpp file but it actually gave me more errors!
I miss be misunderstanding something conceptually here, so if any of you could point me in the right direction that would be great thanks.

You have to link GLFW with pkg-config cf How do I link GLFW
$ gcc `pkg-config --cflags glfw3` -o foo foo.c `pkg-config --static --libs glfw3`
you can locate the libraries using locate or whereis ( update database before with sudo updatedb , https://unix.stackexchange.com/questions/194088/how-to-check-if-a-shared-library-is-installed ) or find ( /www.lifewire.com/uses-of-linux-command-find-2201100 ) i.e.
sudo updatedb ( may take some time ... )
locate libglfw
or
sudo find /usr/lib -name '*libglfw*'
possibly also check all dependencies required for libglfw using ldd

Related

C++ Shared library: Creation and usage

I am trying to build a shared object to later use a function DoSomethingUseful() from the shared object in other projects.
It uses external libraries as well as a bunch of headers that I am using across multiple projects.
Using CMake, I created a project MySharedLib with a header file called
library.h:
#ifndef MYSHAREDLIB_LIBRARY_H
#define MYSHAREDLIB_LIBRARY_H
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <cstdio>
// own header files
#include <header1.h>
#include <header2.h>
#define PI 3.14159265
//tesseract
#include <tesseract/baseapi.h>
#include <leptonica/allheaders.h>
//openCV
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
//face detection
#include "opencv2/objdetect.hpp"
#include "opencv2/imgproc.hpp"
void DoSomethingUseul(int[] inparray);
#endif
With library.cpp as
#include "library.h"
void DoSomethingUseful(int[] inparray){...}
My CMake file is as such:
cmake_minimum_required(VERSION 3.10)
project(MYSHAREDLIB)
find_package( OpenCV REQUIRED )
set(CMAKE_CXX_STANDARD 11)
set(MY_INCLUDE_DIR ../source/)
set(MY_OPENCV_CASCADES /opencvpath/openCV34/opencv/sources/data/haarcascades/)
include_directories(${MY_INCLUDE_DIR} ${MY_OPENCV_CASCADES} /usr/include)
link_directories(${MY_INCLUDE_DIR})
add_library(MYSHAREDLIB SHARED library.cpp library.h
${MY_INCLUDE_DIR}header1.cpp
${MY_INCLUDE_DIR}header1.h
${MY_INCLUDE_DIR}header2.cpp
${MY_INCLUDE_DIR}header2.h
)
set_target_properties(MYSHAREDLIB PROPERTIES VERSION 3.10)
set_target_properties(MYSHAREDLIB PROPERTIES SOVERSION 1)
target_link_libraries(MYSHAREDLIB lept tesseract ${OpenCV_LIBS})
The *.so file is created sucessfully, i. e. using Clion, no errors are thrown and the file libMySharedLib.so is there.
However, when I want to use the function DoSomethingUseful() in another file DoSomething.cpp:
#include <iostream>
#include "library.h"
using namespace std;
int main()
{
int[2] myarray; myarray[0]=1; myarray[1] =2;
DoSomethingUseful(myarray);
return 0;
}
And
g++ -g -Wall -o DoSomething DoSomething.cpp -I ../source/ -L. libMYSHAREDLIB.so
When I execute
./DoSomething
I get:
./DoSomething: error while loading shared libraries: libMYSHAREDLIB.so: cannot open shared object file: No such file or directory
Before, I compiled without -I ../source/ yielding:
In file included from DoSomething.cpp:8:0:
library.h:19:10: fatal error: header1.h: No such file or directory
#include <header1.h>
I find many threads dealing with this issue in general, and I gathered already a lot of knowledge about shared objects from those issues, also suceeding in getting examples from various tutorials running.
However, I do not suceed with my own project.
This is just one of many questions, but I hope I can get help here and maybe also general hints. Thank you a lot for any help.
Assuming Linux (amend question if wrong). When running an executable, shared libraries are loaded from paths listed in /etc/ld.so.conf only. If you want to load from somewhere else (.) , you have to set the LD_LIBRARY_PATH environment variable, e.g. LD_LIBRARY_PATH=. ./DoSomething

VTK Undefined Reference

I installed VTK 7.1.1 as suggested here.
I'm working on a new project with the following code:
#include <iostream>
#include <vtk-7.1/vtkImageData.h>
#include <vtk-7.1/vtkMetaImageReader.h>
#include <vtk-7.1/vtkSmartPointer.h>
#include <vtk-7.1/vtkRenderer.h>
#include <vtk-7.1/vtkImageActor.h>
#include <vtk-7.1/vtkImageMapper3D.h>
#include <vtk-7.1/vtkRenderWindow.h>
#include <vtk-7.1/vtkRenderWindowInteractor.h>
int main()
{
vtkSmartPointer<vtkMetaImageReader> reader = vtkSmartPointer<vtkMetaImageReader>::New();
reader->SetFileName("Test.mhd");
reader->Update();
std::cout<<"Hello World";
return 0;
}
I am using the following to compile:
g++ -g -Wall -I /usr/local/include -L /usr/local/lib -o main main.cpp
However, I keep getting errors such as the following:
/usr/local/include/vtk-7.1/vtkSmartPointer.h:29: error: undefined reference to `vtkSmartPointerBase::~vtkSmartPointerBase()'
Any idea as to why? I think it might be the linking maybe?
Your assumption is correct the linker command is missing the required VTK libraries. Look in the following link for more details VTK in Makefiles.
For instance
g++ -g -Wall -I /usr/local/include -L/usr/local/lib -lvtkCommon
-lvtkFiltering -lvtkImaging -lvtkGraphics -lvtkGenericFiltering -lvtkIO
-lvtkRendering -lvtkVolumeRendering
To ease building your VTK applications you could use CMake

Compile error : fatal error: 'boost/numeric/ublas/matrix.hpp' file not found

These are the header files and libraries
#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <math.h>
#include <vector>
#include <numeric>
#include <strings.h>
#include <assert.h>
#include <dirent.h>
#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/io.hpp>
#include <boost/geometry.hpp>
#include <boost/geometry/geometries/point_xy.hpp>
#include <boost/geometry/geometries/polygon.hpp>
#include <boost/geometry/geometries/adapted/c_array.hpp>
#include "mail.h"
I am trying to compile this c++ file I got using
g++ -O3 -DNDEBUG -o evaluate_object evaluate_object.cpp
The compile output
evaluate_object.cpp:13:10: fatal error: 'boost/numeric/ublas/matrix.hpp' file
not found
#include <boost/numeric/ublas/matrix.hpp>
^
1 error generated.
Ps: I run on macos sierra 10.12
I have tried install boost by these ways:
sudo port install boost
brew install boost
sudo port install boost +universal
But I still got the same problem.
I would be happy to get out of this noob zone.
I am a macos newbie too.
It seems that your "boost" includes directory is not present within environment defined include directories. You might want to specify one by passing "-I" argument to g++ command, i.e.
g++ -O3 -DNDEBUG -I/usr/local/Cellar/blahblah -o evaluate_object evaluate_object.cpp
Also your code is incomplete and perhaps if you actually call some of the boost functions you might need to add some objects for linking and then you will face "undefined reference to" error. To overcome such you need to specify "-L" flag for your g++ command.

Tesseract-ocr, baseapi.h fatal error: platform.h file not found

I am working on engineering work on license plate recognition and therefore started from a simple code. Namely, I downloaded all the libraries or OpenCV, Tesseract and Leptonica but when you try to compile I have a problem with the file baseapi.h located in the library Tesseract.
Compiles the following command: g++ main.cpp -lopencv_core -lopencv_highgui -lopencv_imgproc -ltesseract
Error The compiled: tesseract-ocr/api/baseapi.h:27:22: fatal error: platform.h: No such file or directory
The beginning of my code:
#include <iostream>
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "leptonica-1.69/src/allheaders.h"
#include "tesseract-ocr/api/baseapi.h"
using namespace std;
using namespace tesseract;
using namespace cv;
...
try to install dev packages
$ sudo apt install tesseract-ocr-dev
$ sudo apt install libleptonica-dev

Connecting Mongodb to C++ API #include problems

I got the mongoshell and Json file all set up. I need help connecting Mongodb to C++
I typed this in the command prompt but it gave a a syntax error. (my file name is ConnectorMain.cpp)
-I/usr/local/include -L/usr/local/lib -pthread -lmongoclient -lboost_thread-mt -lboost_filesystem -lboost_program_options -lboost_system app/ConnectorMain.cpp -o ConnectorMain
This person had the same problem: Mongo C++ Driver: mongo/client/dbclient.h: No such file or directory
The reason that there you need to type this in the cmd pmt is because it will allow you to access the weird #inclue files like: #include "mongo/client/dbclient.h"
I've visited http://api.mongodb.org/cplusplus/current/files.html
and this is the dbclient.h file
#pragma once
#ifdef MONGO_EXPOSE_MACROS
#error dbclient.h is for C++ driver consumer use only
#endif
#define LIBMONGOCLIENT_CONSUMER
#include "mongo/client/redef_macros.h"
#include "mongo/pch.h"
#include "mongo/client/connpool.h"
#include "mongo/client/dbclient_rs.h"
#include "mongo/client/dbclientcursor.h"
#include "mongo/client/dbclientinterface.h"
#include "mongo/client/gridfs.h"
#include "mongo/client/init.h"
#include "mongo/client/sasl_client_authenticate.h"
#include "mongo/client/syncclusterconnection.h"
#include "mongo/util/net/ssl_options.h"
#include "mongo/client/undef_macros.h"
and it is crazy cause of all the headers so I am trying to figure out how to hook this all up and as the forum says it has to do with setting up a -I or -L because it relates to this forum http://docs.mongodb.org/ecosystem/tutorial/getting-started-with-cpp-driver/#installing-the-driver-library-and-headers but that is in Linux.
Please help if you know how to do this. p.s. do I need to download boost and perl or something I saw that on another post. Anyways all the help is appreciated!