Related
I have successfully installed the OpenABE Library - https://github.com/zeutro/openabe
But when I try to compile my own program or run the example - https://github.com/zeutro/openabe/blob/master/examples/test_cp.cpp
g++ test.cpp
I get the Error:
/tmp/ccAcWSoq.o: In function main':
test.cpp:(.text+0x29): undefined reference tooabe::InitializeOpenABE()'
test.cpp:(.text+0x6a): undefined reference to oabe::OpenABECryptoContext::OpenABECryptoContext(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool)'
test.cpp:(.text+0xea): undefined reference tooabe::OpenABECryptoContext::generateParams()'
test.cpp:(.text+0x1bf): undefined reference to oabe::OpenABECryptoContext::keygen(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
test.cpp:(.text+0x27b): undefined reference tooabe::OpenABECryptoContext::encrypt(std::__cxx11::basic_string, std::allocator >, std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator >&)'
test.cpp:(.text+0x2dd): undefined reference to oabe::OpenABECryptoContext::decrypt(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&)'
test.cpp:(.text+0x385): undefined reference tooabe::ShutdownOpenABE()'
/tmp/ccAcWSoq.o: In function oabe::OpenABECryptoContext::~OpenABECryptoContext()':
test.cpp:(.text._ZN4oabe20OpenABECryptoContextD2Ev[_ZN4oabe20OpenABECryptoContextD5Ev]+0xf): undefined reference tovtable for oabe::OpenABECryptoContext'
collect2: error: ld returned 1 exit status
Here is the code - test.cpp
#include <iostream>
#include <string>
#include <cassert>
#include <openabe/openabe.h>
#include <openabe/zsymcrypto.h>
using namespace std;
using namespace oabe;
using namespace oabe::crypto;
int main(int argc, char **argv){
InitializeOpenABE();
OpenABECryptoContext cpabe("CP-ABE");
string ct, pt1 = "plaintext", pt2;
cpabe.generateParams();
cpabe.keygen("|attr1|attr2","key0");
cpabe.encrypt("attr1 and attr2",pt1,ct);
bool result = cpabe.decrypt("key0",ct,pt2);
assert(result && pt1 == pt2);
cout << "Message: " << pt2 << endl;
ShutdownOpenABE();
return 0;
}
Am I even compiling the file correctly?
Or is there any other issue that I cannot seem to identify?
I am a C++ newbie trying to compile some OpenCV tutorial code.
I'm running Ubuntu 16.04, and I installed OpenCV 3.1.0 with this script: https://github.com/milq/scripts-ubuntu-debian/blob/master/install-opencv.sh
The source file I'm trying to compile is here:
https://github.com/opencv/opencv/blob/master/samples/cpp/tutorial_code/calib3d/camera_calibration/camera_calibration.cpp
I wrote this makefile:
CC=g++
CFLAGS = `pkg-config --cflags opencv` -c -g
LIBS = `pkg-config --libs opencv`
all: camcalib
camcalib: camera_calibration.o
$(CC) camera_calibration.o -o camcalib
camera_calibration.o: camera_calibration.cpp
$(CC) $(CFLAGS) $(LIBS) camera_calibration.cpp
clean:
rm *o camcalib
When I "make", the camera_calibration.o object file is generated, but I get the following error during linking:
make
g++ `pkg-config --cflags opencv` -c -g `pkg-config --libs opencv` camera_calibration.cpp
g++ camera_calibration.o -o camcalib
camera_calibration.o: In function `cv::read(cv::FileNode const&, bool&, bool)':
/usr/local/include/opencv2/core/persistence.hpp:996: undefined reference to `cv::read(cv::FileNode const&, int&, int)'
camera_calibration.o: In function `cv::operator<<(cv::FileStorage&, char const*)':
/usr/local/include/opencv2/core/persistence.hpp:1076: undefined reference to `cv::operator<<(cv::FileStorage&, cv::String const&)'
camera_calibration.o: In function `cv::operator<<(cv::FileStorage&, char*)':
/usr/local/include/opencv2/core/persistence.hpp:1084: undefined reference to `cv::operator<<(cv::FileStorage&, cv::String const&)'
camera_calibration.o: In function `void cv::operator>><std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(cv::FileNode const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&)':
/usr/local/include/opencv2/core/cvstd.inl.hpp:155: undefined reference to `cv::read(cv::FileNode const&, cv::String&, cv::String const&)'
camera_calibration.o: In function `main':
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:239: undefined reference to `cv::FileStorage::FileStorage(cv::String const&, int, cv::String const&)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:240: undefined reference to `cv::FileStorage::isOpened() const'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:245: undefined reference to `cv::FileStorage::operator[](char const*) const'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:246: undefined reference to `cv::FileStorage::release()'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:292: undefined reference to `cv::flip(cv::_InputArray const&, cv::_OutputArray const&, int)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:309: undefined reference to `cv::findChessboardCorners(cv::_InputArray const&, cv::Size_<int>, cv::_OutputArray const&, int)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:312: undefined reference to `cv::SimpleBlobDetector::Params::Params()'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:312: undefined reference to `cv::SimpleBlobDetector::create(cv::SimpleBlobDetector::Params const&)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:312: undefined reference to `cv::findCirclesGrid(cv::_InputArray const&, cv::Size_<int>, cv::_OutputArray const&, int, cv::Ptr<cv::Feature2D> const&)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:315: undefined reference to `cv::SimpleBlobDetector::Params::Params()'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:315: undefined reference to `cv::SimpleBlobDetector::create(cv::SimpleBlobDetector::Params const&)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:315: undefined reference to `cv::findCirclesGrid(cv::_InputArray const&, cv::Size_<int>, cv::_OutputArray const&, int, cv::Ptr<cv::Feature2D> const&)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:329: undefined reference to `cv::cvtColor(cv::_InputArray const&, cv::_OutputArray const&, int, int)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:331: undefined reference to `cv::cornerSubPix(cv::_InputArray const&, cv::_InputOutputArray const&, cv::Size_<int>, cv::Size_<int>, cv::TermCriteria)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:335: undefined reference to `cv::VideoCapture::isOpened() const'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:339: undefined reference to `cv::VideoCapture::isOpened() const'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:343: undefined reference to `cv::drawChessboardCorners(cv::_InputOutputArray const&, cv::Size_<int>, cv::_InputArray const&, bool)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:351: undefined reference to `cv::getTextSize(cv::String const&, int, double, int, int*)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:357: undefined reference to `cv::format(char const*, ...)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:359: undefined reference to `cv::format(char const*, ...)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:362: undefined reference to `cv::putText(cv::_InputOutputArray const&, cv::String const&, cv::Point_<int>, int, double, cv::Scalar_<double>, int, int, bool)'
camera_calibration.o: In function `main':
/usr/local/include/opencv2/core.hpp:1257: undefined reference to `cv::noArray()'
camera_calibration.o: In function `main':
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:365: undefined reference to `cv::bitwise_not(cv::_InputArray const&, cv::_OutputArray const&, cv::_InputArray const&)'
camera_calibration.o: In function `main':
/usr/local/include/opencv2/imgproc.hpp:2609: undefined reference to `cv::noArray()'
camera_calibration.o: In function `main':
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:372: undefined reference to `cv::undistort(cv::_InputArray const&, cv::_OutputArray const&, cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:377: undefined reference to `cv::imshow(cv::String const&, cv::_InputArray const&)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:378: undefined reference to `cv::VideoCapture::isOpened() const'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:378: undefined reference to `cv::waitKey(int)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:386: undefined reference to `cv::VideoCapture::isOpened() const'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:404: undefined reference to `cv::fisheye::estimateNewCameraMatrixForUndistortRectify(cv::_InputArray const&, cv::_InputArray const&, cv::Size_<int> const&, cv::_InputArray const&, cv::_OutputArray const&, double, cv::Size_<int> const&, double)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:406: undefined reference to `cv::fisheye::initUndistortRectifyMap(cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&, cv::Size_<int> const&, int, cv::_OutputArray const&, cv::_OutputArray const&)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:412: undefined reference to `cv::getOptimalNewCameraMatrix(cv::_InputArray const&, cv::_InputArray const&, cv::Size_<int>, double, cv::Size_<int>, cv::Rect_<int>*, bool)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:413: undefined reference to `cv::initUndistortRectifyMap(cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&, cv::Size_<int>, int, cv::_OutputArray const&, cv::_OutputArray const&)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:418: undefined reference to `cv::imread(cv::String const&, int)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:421: undefined reference to `cv::remap(cv::_InputArray const&, cv::_OutputArray const&, cv::_InputArray const&, cv::_InputArray const&, int, int, cv::Scalar_<double> const&)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:422: undefined reference to `cv::imshow(cv::String const&, cv::_InputArray const&)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:423: undefined reference to `cv::waitKey(int)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:239: undefined reference to `cv::FileStorage::~FileStorage()'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:431: undefined reference to `cv::FileStorage::~FileStorage()'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:431: undefined reference to `cv::FileStorage::~FileStorage()'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:239: undefined reference to `cv::FileStorage::~FileStorage()'
camera_calibration.o: In function `computeReprojectionErrors(std::vector<std::vector<cv::Point3_<float>, std::allocator<cv::Point3_<float> > >, std::allocator<std::vector<cv::Point3_<float>, std::allocator<cv::Point3_<float> > > > > const&, std::vector<std::vector<cv::Point_<float>, std::allocator<cv::Point_<float> > >, std::allocator<std::vector<cv::Point_<float>, std::allocator<cv::Point_<float> > > > > const&, std::vector<cv::Mat, std::allocator<cv::Mat> > const&, std::vector<cv::Mat, std::allocator<cv::Mat> > const&, cv::Mat const&, cv::Mat const&, std::vector<float, std::allocator<float> >&, bool)':
/usr/local/include/opencv2/calib3d.hpp:1795: undefined reference to `cv::noArray()'
camera_calibration.o: In function `computeReprojectionErrors(std::vector<std::vector<cv::Point3_<float>, std::allocator<cv::Point3_<float> > >, std::allocator<std::vector<cv::Point3_<float>, std::allocator<cv::Point3_<float> > > > > const&, std::vector<std::vector<cv::Point_<float>, std::allocator<cv::Point_<float> > >, std::allocator<std::vector<cv::Point_<float>, std::allocator<cv::Point_<float> > > > > const&, std::vector<cv::Mat, std::allocator<cv::Mat> > const&, std::vector<cv::Mat, std::allocator<cv::Mat> > const&, cv::Mat const&, cv::Mat const&, std::vector<float, std::allocator<float> >&, bool)':
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:450: undefined reference to `cv::fisheye::projectPoints(cv::_InputArray const&, cv::_OutputArray const&, cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&, double, cv::_OutputArray const&)'
camera_calibration.o: In function `computeReprojectionErrors(std::vector<std::vector<cv::Point3_<float>, std::allocator<cv::Point3_<float> > >, std::allocator<std::vector<cv::Point3_<float>, std::allocator<cv::Point3_<float> > > > > const&, std::vector<std::vector<cv::Point_<float>, std::allocator<cv::Point_<float> > >, std::allocator<std::vector<cv::Point_<float>, std::allocator<cv::Point_<float> > > > > const&, std::vector<cv::Mat, std::allocator<cv::Mat> > const&, std::vector<cv::Mat, std::allocator<cv::Mat> > const&, cv::Mat const&, cv::Mat const&, std::vector<float, std::allocator<float> >&, bool)':
/usr/local/include/opencv2/calib3d.hpp:513: undefined reference to `cv::noArray()'
camera_calibration.o: In function `computeReprojectionErrors(std::vector<std::vector<cv::Point3_<float>, std::allocator<cv::Point3_<float> > >, std::allocator<std::vector<cv::Point3_<float>, std::allocator<cv::Point3_<float> > > > > const&, std::vector<std::vector<cv::Point_<float>, std::allocator<cv::Point_<float> > >, std::allocator<std::vector<cv::Point_<float>, std::allocator<cv::Point_<float> > > > > const&, std::vector<cv::Mat, std::allocator<cv::Mat> > const&, std::vector<cv::Mat, std::allocator<cv::Mat> > const&, cv::Mat const&, cv::Mat const&, std::vector<float, std::allocator<float> >&, bool)':
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:454: undefined reference to `cv::projectPoints(cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&, cv::_OutputArray const&, cv::_OutputArray const&, double)'
camera_calibration.o: In function `computeReprojectionErrors(std::vector<std::vector<cv::Point3_<float>, std::allocator<cv::Point3_<float> > >, std::allocator<std::vector<cv::Point3_<float>, std::allocator<cv::Point3_<float> > > > > const&, std::vector<std::vector<cv::Point_<float>, std::allocator<cv::Point_<float> > >, std::allocator<std::vector<cv::Point_<float>, std::allocator<cv::Point_<float> > > > > const&, std::vector<cv::Mat, std::allocator<cv::Mat> > const&, std::vector<cv::Mat, std::allocator<cv::Mat> > const&, cv::Mat const&, cv::Mat const&, std::vector<float, std::allocator<float> >&, bool)':
/usr/local/include/opencv2/core.hpp:668: undefined reference to `cv::noArray()'
camera_calibration.o: In function `computeReprojectionErrors(std::vector<std::vector<cv::Point3_<float>, std::allocator<cv::Point3_<float> > >, std::allocator<std::vector<cv::Point3_<float>, std::allocator<cv::Point3_<float> > > > > const&, std::vector<std::vector<cv::Point_<float>, std::allocator<cv::Point_<float> > >, std::allocator<std::vector<cv::Point_<float>, std::allocator<cv::Point_<float> > > > > const&, std::vector<cv::Mat, std::allocator<cv::Mat> > const&, std::vector<cv::Mat, std::allocator<cv::Mat> > const&, cv::Mat const&, cv::Mat const&, std::vector<float, std::allocator<float> >&, bool)':
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:456: undefined reference to `cv::norm(cv::_InputArray const&, cv::_InputArray const&, int, cv::_InputArray const&)'
camera_calibration.o: In function `runCalibration(Settings&, cv::Size_<int>&, cv::Mat&, cv::Mat&, std::vector<std::vector<cv::Point_<float>, std::allocator<cv::Point_<float> > >, std::allocator<std::vector<cv::Point_<float>, std::allocator<cv::Point_<float> > > > >, std::vector<cv::Mat, std::allocator<cv::Mat> >&, std::vector<cv::Mat, std::allocator<cv::Mat> >&, std::vector<float, std::allocator<float> >&, double&)':
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:497: undefined reference to `cv::Mat::eye(int, int, int)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:502: undefined reference to `cv::Mat::zeros(int, int, int)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:504: undefined reference to `cv::Mat::zeros(int, int, int)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:518: undefined reference to `cv::fisheye::calibrate(cv::_InputArray const&, cv::_InputArray const&, cv::Size_<int> const&, cv::_InputOutputArray const&, cv::_InputOutputArray const&, cv::_OutputArray const&, cv::_OutputArray const&, int, cv::TermCriteria)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:528: undefined reference to `cv::calibrateCamera(cv::_InputArray const&, cv::_InputArray const&, cv::Size_<int>, cv::_InputOutputArray const&, cv::_InputOutputArray const&, cv::_OutputArray const&, cv::_OutputArray const&, int, cv::TermCriteria)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:533: undefined reference to `cv::checkRange(cv::_InputArray const&, bool, cv::Point_<int>*, double, double)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:533: undefined reference to `cv::checkRange(cv::_InputArray const&, bool, cv::Point_<int>*, double, double)'
camera_calibration.o: In function `saveCameraParams(Settings&, cv::Size_<int>&, cv::Mat&, cv::Mat&, std::vector<cv::Mat, std::allocator<cv::Mat> > const&, std::vector<cv::Mat, std::allocator<cv::Mat> > const&, std::vector<float, std::allocator<float> > const&, std::vector<std::vector<cv::Point_<float>, std::allocator<cv::Point_<float> > >, std::allocator<std::vector<cv::Point_<float>, std::allocator<cv::Point_<float> > > > > const&, double)':
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:547: undefined reference to `cv::FileStorage::FileStorage(cv::String const&, int, cv::String const&)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:588: undefined reference to `cvWriteComment'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:604: undefined reference to `cv::error(int, cv::String const&, char const*, char const*, int)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:611: undefined reference to `cv::error(int, cv::String const&, char const*, char const*, int)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:612: undefined reference to `cv::error(int, cv::String const&, char const*, char const*, int)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:614: undefined reference to `cv::Mat::t() const'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:615: undefined reference to `cv::Mat::t() const'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:626: undefined reference to `cv::Mat::reshape(int, int) const'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:628: undefined reference to `cv::Mat::copyTo(cv::_OutputArray const&) const'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:547: undefined reference to `cv::FileStorage::~FileStorage()'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:632: undefined reference to `cv::FileStorage::~FileStorage()'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:632: undefined reference to `cv::FileStorage::~FileStorage()'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:547: undefined reference to `cv::FileStorage::~FileStorage()'
camera_calibration.o: In function `cv::FileStorage& cv::operator<< <int>(cv::FileStorage&, int const&)':
/usr/local/include/opencv2/core/persistence.hpp:1064: undefined reference to `cv::error(int, cv::String const&, char const*, char const*, int)'
/usr/local/include/opencv2/core/persistence.hpp:1065: undefined reference to `cv::write(cv::FileStorage&, cv::String const&, int)'
camera_calibration.o: In function `cv::FileStorage& cv::operator<< <float>(cv::FileStorage&, float const&)':
/usr/local/include/opencv2/core/persistence.hpp:1064: undefined reference to `cv::error(int, cv::String const&, char const*, char const*, int)'
/usr/local/include/opencv2/core/persistence.hpp:1065: undefined reference to `cv::write(cv::FileStorage&, cv::String const&, float)'
camera_calibration.o: In function `cv::FileStorage& cv::operator<< <bool>(cv::FileStorage&, bool const&)':
/usr/local/include/opencv2/core/persistence.hpp:1064: undefined reference to `cv::error(int, cv::String const&, char const*, char const*, int)'
/usr/local/include/opencv2/core/persistence.hpp:1065: undefined reference to `cv::write(cv::FileStorage&, cv::String const&, int)'
camera_calibration.o: In function `void cv::operator>><int>(cv::FileNode const&, int&)':
/usr/local/include/opencv2/core/persistence.hpp:1121: undefined reference to `cv::read(cv::FileNode const&, int&, int)'
camera_calibration.o: In function `void cv::operator>><float>(cv::FileNode const&, float&)':
/usr/local/include/opencv2/core/persistence.hpp:1121: undefined reference to `cv::read(cv::FileNode const&, float&, float)'
camera_calibration.o: In function `cv::FileStorage& cv::operator<< <cv::Mat>(cv::FileStorage&, cv::Mat const&)':
/usr/local/include/opencv2/core/persistence.hpp:1064: undefined reference to `cv::error(int, cv::String const&, char const*, char const*, int)'
/usr/local/include/opencv2/core/persistence.hpp:1065: undefined reference to `cv::write(cv::FileStorage&, cv::String const&, cv::Mat const&)'
camera_calibration.o: In function `cv::FileStorage& cv::operator<< <double>(cv::FileStorage&, double const&)':
/usr/local/include/opencv2/core/persistence.hpp:1064: undefined reference to `cv::error(int, cv::String const&, char const*, char const*, int)'
/usr/local/include/opencv2/core/persistence.hpp:1065: undefined reference to `cv::write(cv::FileStorage&, cv::String const&, double)'
camera_calibration.o: In function `cv::String::String(char const*)':
/usr/local/include/opencv2/core/cvstd.hpp:625: undefined reference to `cv::String::allocate(unsigned long)'
camera_calibration.o: In function `cv::String::~String()':
/usr/local/include/opencv2/core/cvstd.hpp:667: undefined reference to `cv::String::deallocate()'
camera_calibration.o: In function `cv::Mat::Mat(cv::Mat const&)':
/usr/local/include/opencv2/core/mat.inl.hpp:400: undefined reference to `cv::Mat::copySize(cv::Mat const&)'
camera_calibration.o: In function `cv::Mat::Mat(int, int, int, void*, unsigned long)':
/usr/local/include/opencv2/core/mat.inl.hpp:410: undefined reference to `cv::error(int, cv::String const&, char const*, char const*, int)'
/usr/local/include/opencv2/core/mat.inl.hpp:426: undefined reference to `cv::error(int, cv::String const&, char const*, char const*, int)'
camera_calibration.o: In function `cv::Mat::~Mat()':
/usr/local/include/opencv2/core/mat.inl.hpp:571: undefined reference to `cv::fastFree(void*)'
camera_calibration.o: In function `cv::Mat::operator=(cv::Mat const&)':
/usr/local/include/opencv2/core/mat.inl.hpp:592: undefined reference to `cv::Mat::copySize(cv::Mat const&)'
camera_calibration.o: In function `cv::Mat::row(int) const':
/usr/local/include/opencv2/core/mat.inl.hpp:606: undefined reference to `cv::Mat::Mat(cv::Mat const&, cv::Range const&, cv::Range const&)'
camera_calibration.o: In function `cv::Mat::clone() const':
/usr/local/include/opencv2/core/mat.inl.hpp:643: undefined reference to `cv::Mat::copyTo(cv::_OutputArray const&) const'
camera_calibration.o: In function `cv::Mat::create(int, int, int)':
/usr/local/include/opencv2/core/mat.inl.hpp:663: undefined reference to `cv::Mat::create(int, int const*, int)'
camera_calibration.o: In function `cv::Mat::release()':
/usr/local/include/opencv2/core/mat.inl.hpp:682: undefined reference to `cv::Mat::deallocate()'
camera_calibration.o: In function `cv::Mat::operator()(cv::Range, cv::Range) const':
/usr/local/include/opencv2/core/mat.inl.hpp:692: undefined reference to `cv::Mat::Mat(cv::Mat const&, cv::Range const&, cv::Range const&)'
camera_calibration.o: In function `cv::FileStorage::getFirstTopLevelNode() const':
/usr/local/include/opencv2/core/persistence.hpp:1167: undefined reference to `cv::FileStorage::root(int) const'
camera_calibration.o: In function `cv::FileNode::begin() const':
/usr/local/include/opencv2/core/persistence.hpp:1184: undefined reference to `cv::FileNodeIterator::FileNodeIterator(CvFileStorage const*, CvFileNode const*, unsigned long)'
camera_calibration.o: In function `cv::FileNode::end() const':
/usr/local/include/opencv2/core/persistence.hpp:1185: undefined reference to `cv::FileNode::size() const'
/usr/local/include/opencv2/core/persistence.hpp:1185: undefined reference to `cv::FileNodeIterator::FileNodeIterator(CvFileStorage const*, CvFileNode const*, unsigned long)'
camera_calibration.o: In function `cv::String::String(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
/usr/local/include/opencv2/core/cvstd.inl.hpp:81: undefined reference to `cv::String::allocate(unsigned long)'
camera_calibration.o: In function `cv::FileNode::operator std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >[abi:cxx11]() const':
/usr/local/include/opencv2/core/cvstd.inl.hpp:147: undefined reference to `cv::read(cv::FileNode const&, cv::String&, cv::String const&)'
camera_calibration.o: In function `Settings::Settings()':
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:31: undefined reference to `cv::VideoCapture::VideoCapture()'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:31: undefined reference to `cv::VideoCapture::~VideoCapture()'
camera_calibration.o: In function `Settings::read(cv::FileNode const&)':
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:60: undefined reference to `cv::FileNode::operator[](char const*) const'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:61: undefined reference to `cv::FileNode::operator[](char const*) const'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:62: undefined reference to `cv::FileNode::operator[](char const*) const'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:63: undefined reference to `cv::FileNode::operator[](char const*) const'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:64: undefined reference to `cv::FileNode::operator[](char const*) const'
camera_calibration.o:/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:65: more undefined references to `cv::FileNode::operator[](char const*) const' follow
camera_calibration.o: In function `Settings::validate()':
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:118: undefined reference to `cv::VideoCapture::open(int)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:120: undefined reference to `cv::VideoCapture::open(cv::String const&)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:121: undefined reference to `cv::VideoCapture::isOpened() const'
camera_calibration.o: In function `Settings::nextImage()':
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:157: undefined reference to `cv::VideoCapture::isOpened() const'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:160: undefined reference to `cv::VideoCapture::operator>>(cv::Mat&)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:161: undefined reference to `cv::Mat::copyTo(cv::_OutputArray const&) const'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:164: undefined reference to `cv::imread(cv::String const&, int)'
camera_calibration.o: In function `Settings::readStringList(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&)':
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:172: undefined reference to `cv::FileStorage::FileStorage(cv::String const&, int, cv::String const&)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:173: undefined reference to `cv::FileStorage::isOpened() const'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:176: undefined reference to `cv::FileNode::type() const'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:179: undefined reference to `cv::FileNodeIterator::operator++()'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:172: undefined reference to `cv::FileStorage::~FileStorage()'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:182: undefined reference to `cv::FileStorage::~FileStorage()'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:182: undefined reference to `cv::FileStorage::~FileStorage()'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:172: undefined reference to `cv::FileStorage::~FileStorage()'
camera_calibration.o: In function `Settings::~Settings()':
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:28: undefined reference to `cv::VideoCapture::~VideoCapture()'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:28: undefined reference to `cv::VideoCapture::~VideoCapture()'
camera_calibration.o: In function `cv::Mat::Mat<cv::Point_<float> >(std::vector<cv::Point_<float>, std::allocator<cv::Point_<float> > > const&, bool)':
/usr/local/include/opencv2/core/mat.inl.hpp:484: undefined reference to `cv::Mat::copyTo(cv::_OutputArray const&) const'
camera_calibration.o: In function `cv::Mat::Mat<float>(std::vector<float, std::allocator<float> > const&, bool)':
/usr/local/include/opencv2/core/mat.inl.hpp:484: undefined reference to `cv::Mat::copyTo(cv::_OutputArray const&) const'
collect2: error: ld returned 1 exit status
makefile:9: recipe for target 'camcalib' failed
make: *** [camcalib] Error 1
It seems OpenCV is installed, because when I type "pkg-config --libs --cflags opencv" in terminal, I get:
-I/usr/local/include/opencv -I/usr/local/include -L/usr/local/lib -lopencv_shape -lopencv_stitching -lopencv_objdetect -lopencv_superres -lopencv_videostab -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_ml -lopencv_imgproc -lopencv_flann -lopencv_viz -lippicv -lopencv_core
I've been trying lots of things, but I'm stumped. If anyone has any advice, I would greatly appreciate it.
UPDATE
Solved the issue. The was the structure of the g++ command. This one worked for me:
g++ tutorial.cpp -I/opt/local/include -I/usr/include/boost -L/opt/local/lib -lmongoclient -lboost_thread -lboost_system -lboost_regex -o tutorial
OS: Ubuntu 16.04 64-bit
Following this tutorial:
https://mongodb.github.io/mongo-cxx-driver/legacy-v1/tutorial/
I'm able to build the mongodb-client using SCons with no issue.
mongo folder of header files here:
/opt/local/include
libmongoclient.a file here:
/opt/local/lib
Code is as follows, same as the tutorial:
#include <cstdlib>
#include <iostream>
#include "mongo/client/dbclient.h" // for the driver
void run() {
mongo::DBClientConnection c;
c.connect("localhost");
}
int main() {
mongo::client::initialize();
try {
run();
std::cout << "connected ok" << std::endl;
} catch( const mongo::DBException &e ) {
std::cout << "caught " << e.what() << std::endl;
}
return EXIT_SUCCESS;
}
This is the command I'm using to compile:
g++ -I/opt/local/include -L/opt/local/lib -pthread -lmongoclient -lboost_thread -lboost_system -lboost_filesystem -lboost_program_options tutorial.cpp -o tutorial
I receive the following error
/tmp/cceJe78D.o: In function `run()':
tutorial.cpp:(.text+0x34): undefined reference to `mongo::DBClientConnection::DBClientConnection(bool, mongo::DBClientReplicaSet*, double)'
/tmp/cceJe78D.o: In function `main':
tutorial.cpp:(.text+0x12f): undefined reference to `mongo::client::Options::Options()'
tutorial.cpp:(.text+0x148): undefined reference to `mongo::client::initialize(mongo::client::Options const&)'
/tmp/cceJe78D.o: In function `__static_initialization_and_destruction_0(int, int)':
tutorial.cpp:(.text+0x299): undefined reference to `boost::system::generic_category()'
tutorial.cpp:(.text+0x2a5): undefined reference to `boost::system::generic_category()'
tutorial.cpp:(.text+0x2b1): undefined reference to `boost::system::system_category()'
/tmp/cceJe78D.o: In function `mongo::DBException::DBException(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)':
tutorial.cpp:(.text._ZN5mongo11DBExceptionC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi[_ZN5mongo11DBExceptionC5ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi]+0x21): undefined reference to `vtable for mongo::DBException'
/tmp/cceJe78D.o: In function `mongo::DBException::~DBException()':
tutorial.cpp:(.text._ZN5mongo11DBExceptionD2Ev[_ZN5mongo11DBExceptionD5Ev]+0x10): undefined reference to `vtable for mongo::DBException'
/tmp/cceJe78D.o: In function `mongo::DBException::addContext(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
tutorial.cpp:(.text._ZN5mongo11DBException10addContextERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE[_ZN5mongo11DBException10addContextERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE]+0x33): undefined reference to `mongo::causedBy(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/tmp/cceJe78D.o: In function `mongo::UserException::UserException(int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
tutorial.cpp:(.text._ZN5mongo13UserExceptionC2EiRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE[_ZN5mongo13UserExceptionC5EiRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE]+0x2a): undefined reference to `vtable for mongo::UserException'
/tmp/cceJe78D.o: In function `mongo::UserException::~UserException()':
tutorial.cpp:(.text._ZN5mongo13UserExceptionD2Ev[_ZN5mongo13UserExceptionD5Ev]+0xd): undefined reference to `vtable for mongo::UserException'
/tmp/cceJe78D.o: In function `mongo::DBClientConnection::~DBClientConnection()':
tutorial.cpp:(.text._ZN5mongo18DBClientConnectionD2Ev[_ZN5mongo18DBClientConnectionD5Ev]+0xe): undefined reference to `vtable for mongo::DBClientConnection'
tutorial.cpp:(.text._ZN5mongo18DBClientConnectionD2Ev[_ZN5mongo18DBClientConnectionD5Ev]+0x1a): undefined reference to `vtable for mongo::DBClientConnection'
tutorial.cpp:(.text._ZN5mongo18DBClientConnectionD2Ev[_ZN5mongo18DBClientConnectionD5Ev]+0x2c): undefined reference to `mongo::DBClientConnection::_numConnections'
tutorial.cpp:(.text._ZN5mongo18DBClientConnectionD2Ev[_ZN5mongo18DBClientConnectionD5Ev]+0xbb): undefined reference to `mongo::DBClientBase::~DBClientBase()'
tutorial.cpp:(.text._ZN5mongo18DBClientConnectionD2Ev[_ZN5mongo18DBClientConnectionD5Ev]+0x189): undefined reference to `mongo::DBClientBase::~DBClientBase()'
/tmp/cceJe78D.o: In function `mongo::DBClientConnection::connect(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
tutorial.cpp:(.text._ZN5mongo18DBClientConnection7connectERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE[_ZN5mongo18DBClientConnection7connectERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE]+0x78): undefined reference to `mongo::HostAndPort::HostAndPort(mongo::StringData const&)'
/tmp/cceJe78D.o:(.gcc_except_table+0x50): undefined reference to `typeinfo for mongo::DBException'
/tmp/cceJe78D.o:(.rodata._ZTVN5mongo16ConnectExceptionE[_ZTVN5mongo16ConnectExceptionE]+0x30): undefined reference to `mongo::UserException::appendPrefix(std::__cxx11::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >&) const'
/tmp/cceJe78D.o:(.rodata._ZTVN5mongo16ConnectExceptionE[_ZTVN5mongo16ConnectExceptionE]+0x40): undefined reference to `mongo::DBException::toString[abi:cxx11]() const'
/tmp/cceJe78D.o:(.rodata._ZTVN5mongo18AssertionExceptionE[_ZTVN5mongo18AssertionExceptionE]+0x40): undefined reference to `mongo::DBException::toString[abi:cxx11]() const'
/tmp/cceJe78D.o:(.rodata._ZTIN5mongo16ConnectExceptionE[_ZTIN5mongo16ConnectExceptionE]+0x10): undefined reference to `typeinfo for mongo::UserException'
/tmp/cceJe78D.o:(.rodata._ZTIN5mongo18AssertionExceptionE[_ZTIN5mongo18AssertionExceptionE]+0x10): undefined reference to `typeinfo for mongo::DBException'
collect2: error: ld returned 1 exit status
I've searched around Google, and saw some people with the same issue, but they didn't appear to be linking files correctly. As far as I can tell I'm doing everything correctly.
Any help would be greatly appreciated.
EDIT
Output if I change the command to:
g++ tutorial.cpp -I/opt/local/include -I/usr/include/boost -L/opt/local/lib -pthread -lmongoclient -lboost_thread -lboost_system -lboost_filesystem -lboost_program_options -o tutorial
/opt/local/lib/libmongoclient.a(dbclient.o): In function `boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::assign(char const*, char const*, unsigned int)':
/usr/include/boost/regex/v4/basic_regex.hpp:380: undefined reference to `boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::do_assign(char const*, char const*, unsigned int)'
/opt/local/lib/libmongoclient.a(dbclient.o): In function `boost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::unwind_extra_block(bool)':
/usr/include/boost/regex/v4/perl_matcher_non_recursive.hpp:1135: undefined reference to `boost::re_detail::put_mem_block(void*)'
/opt/local/lib/libmongoclient.a(dbclient.o): In function `boost::cpp_regex_traits<char>::transform_primary(char const*, char const*) const':
/usr/include/boost/regex/v4/cpp_regex_traits.hpp:965: undefined reference to `boost::re_detail::cpp_regex_traits_implementation<char>::transform_primary(char const*, char const*) const'
/opt/local/lib/libmongoclient.a(dbclient.o): In function `boost::cpp_regex_traits<char>::transform(char const*, char const*) const':
/usr/include/boost/regex/v4/cpp_regex_traits.hpp:961: undefined reference to `boost::re_detail::cpp_regex_traits_implementation<char>::transform(char const*, char const*) const'
/opt/local/lib/libmongoclient.a(dbclient.o): In function `void boost::re_detail::raise_error<boost::regex_traits_wrapper<boost::regex_traits<char, boost::cpp_regex_traits<char> > > >(boost::regex_traits_wrapper<boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::error_type)':
/usr/include/boost/regex/pattern_except.hpp:75: undefined reference to `boost::re_detail::raise_runtime_error(std::runtime_error const&)'
/opt/local/lib/libmongoclient.a(dbclient.o): In function `boost::re_detail::cpp_regex_traits_implementation<char>::error_string(boost::regex_constants::error_type) const':
/usr/include/boost/regex/v4/cpp_regex_traits.hpp:448: undefined reference to `boost::re_detail::get_default_error_string(boost::regex_constants::error_type)'
/opt/local/lib/libmongoclient.a(dbclient.o): In function `boost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::extend_stack()':
/usr/include/boost/regex/v4/perl_matcher_non_recursive.hpp:213: undefined reference to `boost::re_detail::get_mem_block()'
/opt/local/lib/libmongoclient.a(dbclient.o): In function `boost::re_detail::save_state_init::save_state_init(boost::re_detail::saved_state**, boost::re_detail::saved_state**)':
/usr/include/boost/regex/v4/perl_matcher_non_recursive.hpp:107: undefined reference to `boost::re_detail::get_mem_block()'
/opt/local/lib/libmongoclient.a(dbclient.o): In function `boost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::match_imp()':
/usr/include/boost/regex/v4/perl_matcher_common.hpp:208: undefined reference to `boost::re_detail::verify_options(unsigned int, boost::regex_constants::_match_flags)'
/opt/local/lib/libmongoclient.a(dbclient.o): In function `boost::re_detail::save_state_init::~save_state_init()':
/usr/include/boost/regex/v4/perl_matcher_non_recursive.hpp:115: undefined reference to `boost::re_detail::put_mem_block(void*)'
/opt/local/lib/libmongoclient.a(dbclient.o): In function `boost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::match_prefix()':
/usr/include/boost/regex/v4/perl_matcher_common.hpp:333: undefined reference to `boost::match_results<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > >::maybe_assign(boost::match_results<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > > const&)'
/opt/local/lib/libmongoclient.a(dbclient.o): In function `boost::re_detail::save_state_init::~save_state_init()':
/usr/include/boost/regex/v4/perl_matcher_non_recursive.hpp:115: undefined reference to `boost::re_detail::put_mem_block(void*)'
/opt/local/lib/libmongoclient.a(dbclient.o): In function `boost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::perl_matcher(__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, boost::match_results<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > >&, boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::_match_flags, __gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >)':
/usr/include/boost/regex/v4/perl_matcher.hpp:365: undefined reference to `boost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::construct_init(boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::_match_flags)'
/opt/local/lib/libmongoclient.a(dbclient.o): In function `boost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::match_match()':
/usr/include/boost/regex/v4/perl_matcher_non_recursive.hpp:991: undefined reference to `boost::match_results<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > >::maybe_assign(boost::match_results<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > > const&)'
collect2: error: ld returned 1 exit status
In your g++ command, try to have tutorial.cpp first before the other libs. Some linkers needs to see the objects that need symbols first (from left to right)
Whenever I compile a program using boost::signal I get following errors:
/tmp/ccQFaJsy.o: In function `main':
b_vect.cpp:(.text+0xb7): undefined reference to `boost::signals::connection::~connection()'
/tmp/ccQFaJsy.o: In function `boost::signals::detail::slot_base::data_t::~data_t()':
b_vect.cpp:(.text._ZN5boost7signals6detail9slot_base6data_tD1Ev[boost::signals::detail::slot_base::data_t::~data_t()]+0x16): undefined reference to `boost::signals::connection::~connection()'
/tmp/ccQFaJsy.o: In function `boost::signal0<void, boost::last_value<void>, int, std::less<int>, boost::function0<void, std::allocator<boost::function_base> > >::signal0(boost::last_value<void> const&, std::less<int> const&)':
b_vect.cpp:(.text._ZN5boost7signal0IvNS_10last_valueIvEEiSt4lessIiENS_9function0IvSaINS_13function_baseEEEEEC1ERKS2_RKS4_[boost::signal0<void, boost::last_value<void>, int, std::less<int>, boost::function0<void, std::allocator<boost::function_base> > >::signal0(boost::last_value<void> const&, std::less<int> const&)]+0x51): undefined reference to `boost::signals::detail::signal_base::signal_base(boost::function2<bool, boost::signals::detail::stored_group, boost::signals::detail::stored_group, std::allocator<boost::function_base> > const&, boost::any const&)'
/tmp/ccQFaJsy.o: In function `boost::slot<boost::function0<void, std::allocator<boost::function_base> > >::slot<HelloWorld>(HelloWorld const&)':
b_vect.cpp:(.text._ZN5boost4slotINS_9function0IvSaINS_13function_baseEEEEEC1I10HelloWorldEERKT_[boost::slot<boost::function0<void, std::allocator<boost::function_base> > >::slot<HelloWorld>(HelloWorld const&)]+0xac): undefined reference to `boost::signals::detail::slot_base::create_connection()'
/tmp/ccQFaJsy.o: In function `boost::signal0<void, boost::last_value<void>, int, std::less<int>, boost::function0<void, std::allocator<boost::function_base> > >::connect(boost::slot<boost::function0<void, std::allocator<boost::function_base> > > const&, boost::signals::connect_position)':
b_vect.cpp:(.text._ZN5boost7signal0IvNS_10last_valueIvEEiSt4lessIiENS_9function0IvSaINS_13function_baseEEEEE7connectERKNS_4slotIS8_EENS_7signals16connect_positionE[boost::signal0<void, boost::last_value<void>, int, std::less<int>, boost::function0<void, std::allocator<boost::function_base> > >::connect(boost::slot<boost::function0<void, std::allocator<boost::function_base> > > const&, boost::signals::connect_position)]+0x9a): undefined reference to `boost::signals::detail::signal_base_impl::connect_slot(boost::any const&, boost::signals::detail::stored_group const&, boost::shared_ptr<boost::signals::detail::slot_base::data_t>, boost::signals::connect_position)'
/tmp/ccQFaJsy.o: In function `void boost::iterator_core_access::increment<boost::signals::detail::named_slot_map_iterator>(boost::signals::detail::named_slot_map_iterator&)':
b_vect.cpp:(.text._ZN5boost20iterator_core_access9incrementINS_7signals6detail23named_slot_map_iteratorEEEvRT_[void boost::iterator_core_access::increment<boost::signals::detail::named_slot_map_iterator>(boost::signals::detail::named_slot_map_iterator&)]+0x11): undefined reference to `boost::signals::detail::named_slot_map_iterator::increment()'
/tmp/ccQFaJsy.o: In function `bool boost::iterator_core_access::equal<boost::signals::detail::named_slot_map_iterator, boost::signals::detail::named_slot_map_iterator>(boost::signals::detail::named_slot_map_iterator const&, boost::signals::detail::named_slot_map_iterator const&, mpl_::bool_<true>)':
b_vect.cpp:(.text._ZN5boost20iterator_core_access5equalINS_7signals6detail23named_slot_map_iteratorES4_EEbRKT_RKT0_N4mpl_5bool_ILb1EEE[bool boost::iterator_core_access::equal<boost::signals::detail::named_slot_map_iterator, boost::signals::detail::named_slot_map_iterator>(boost::signals::detail::named_slot_map_iterator const&, boost::signals::detail::named_slot_map_iterator const&, mpl_::bool_<true>)]+0x19): undefined reference to `boost::signals::detail::named_slot_map_iterator::equal(boost::signals::detail::named_slot_map_iterator const&) const'
/tmp/ccQFaJsy.o: In function `boost::signals::detail::named_slot_map_iterator::reference boost::iterator_core_access::dereference<boost::signals::detail::named_slot_map_iterator>(boost::signals::detail::named_slot_map_iterator const&)':
b_vect.cpp:(.text._ZN5boost20iterator_core_access11dereferenceINS_7signals6detail23named_slot_map_iteratorEEENT_9referenceERKS5_[boost::signals::detail::named_slot_map_iterator::reference boost::iterator_core_access::dereference<boost::signals::detail::named_slot_map_iterator>(boost::signals::detail::named_slot_map_iterator const&)]+0x11): undefined reference to `boost::signals::detail::named_slot_map_iterator::dereference() const'
/tmp/ccQFaJsy.o: In function `boost::signals::detail::named_slot_map_iterator std::__find_if<boost::signals::detail::named_slot_map_iterator, boost::signals::detail::is_callable>(boost::signals::detail::named_slot_map_iterator, boost::signals::detail::named_slot_map_iterator, boost::signals::detail::is_callable, std::input_iterator_tag)':
b_vect.cpp:(.text._ZSt9__find_ifIN5boost7signals6detail23named_slot_map_iteratorENS2_11is_callableEET_S5_S5_T0_St18input_iterator_tag[boost::signals::detail::named_slot_map_iterator std::__find_if<boost::signals::detail::named_slot_map_iterator, boost::signals::detail::is_callable>(boost::signals::detail::named_slot_map_iterator, boost::signals::detail::named_slot_map_iterator, boost::signals::detail::is_callable, std::input_iterator_tag)]+0x6d): undefined reference to `boost::signals::detail::named_slot_map_iterator::named_slot_map_iterator(boost::signals::detail::named_slot_map_iterator const&)'
/tmp/ccQFaJsy.o: In function `boost::signals::detail::named_slot_map_iterator std::find_if<boost::signals::detail::named_slot_map_iterator, boost::signals::detail::is_callable>(boost::signals::detail::named_slot_map_iterator, boost::signals::detail::named_slot_map_iterator, boost::signals::detail::is_callable)':
b_vect.cpp:(.text._ZSt7find_ifIN5boost7signals6detail23named_slot_map_iteratorENS2_11is_callableEET_S5_S5_T0_[boost::signals::detail::named_slot_map_iterator std::find_if<boost::signals::detail::named_slot_map_iterator, boost::signals::detail::is_callable>(boost::signals::detail::named_slot_map_iterator, boost::signals::detail::named_slot_map_iterator, boost::signals::detail::is_callable)]+0x2b): undefined reference to `boost::signals::detail::named_slot_map_iterator::named_slot_map_iterator(boost::signals::detail::named_slot_map_iterator const&)'
b_vect.cpp:(.text._ZSt7find_ifIN5boost7signals6detail23named_slot_map_iteratorENS2_11is_callableEET_S5_S5_T0_[boost::signals::detail::named_slot_map_iterator std::find_if<boost::signals::detail::named_slot_map_iterator, boost::signals::detail::is_callable>(boost::signals::detail::named_slot_map_iterator, boost::signals::detail::named_slot_map_iterator, boost::signals::detail::is_callable)]+0x38): undefined reference to `boost::signals::detail::named_slot_map_iterator::named_slot_map_iterator(boost::signals::detail::named_slot_map_iterator const&)'
/tmp/ccQFaJsy.o: In function `boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::signals::detail::named_slot_map_iterator>::slot_call_iterator(boost::signals::detail::named_slot_map_iterator, boost::signals::detail::named_slot_map_iterator, boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::optional<boost::signals::detail::unusable>&)':
b_vect.cpp:(.text._ZN5boost7signals6detail18slot_call_iteratorINS1_11call_bound0IvE6callerINS_9function0IvSaINS_13function_baseEEEEEENS1_23named_slot_map_iteratorEEC1ESB_SB_SA_RNS_8optionalINS1_8unusableEEE[boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::signals::detail::named_slot_map_iterator>::slot_call_iterator(boost::signals::detail::named_slot_map_iterator, boost::signals::detail::named_slot_map_iterator, boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::optional<boost::signals::detail::unusable>&)]+0x34): undefined reference to `boost::signals::detail::named_slot_map_iterator::named_slot_map_iterator(boost::signals::detail::named_slot_map_iterator const&)'
b_vect.cpp:(.text._ZN5boost7signals6detail18slot_call_iteratorINS1_11call_bound0IvE6callerINS_9function0IvSaINS_13function_baseEEEEEENS1_23named_slot_map_iteratorEEC1ESB_SB_SA_RNS_8optionalINS1_8unusableEEE[boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::signals::detail::named_slot_map_iterator>::slot_call_iterator(boost::signals::detail::named_slot_map_iterator, boost::signals::detail::named_slot_map_iterator, boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::optional<boost::signals::detail::unusable>&)]+0x45): undefined reference to `boost::signals::detail::named_slot_map_iterator::named_slot_map_iterator(boost::signals::detail::named_slot_map_iterator const&)'
/tmp/ccQFaJsy.o:b_vect.cpp:(.text._ZN5boost7signals6detail18slot_call_iteratorINS1_11call_bound0IvE6callerINS_9function0IvSaINS_13function_baseEEEEEENS1_23named_slot_map_iteratorEEC1ESB_SB_SA_RNS_8optionalINS1_8unusableEEE[boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::signals::detail::named_slot_map_iterator>::slot_call_iterator(boost::signals::detail::named_slot_map_iterator, boost::signals::detail::named_slot_map_iterator, boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::optional<boost::signals::detail::unusable>&)]+0x71): more undefined references to `boost::signals::detail::named_slot_map_iterator::named_slot_map_iterator(boost::signals::detail::named_slot_map_iterator const&)' follow
/tmp/ccQFaJsy.o: In function `boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::signals::detail::named_slot_map_iterator>::slot_call_iterator(boost::signals::detail::named_slot_map_iterator, boost::signals::detail::named_slot_map_iterator, boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::optional<boost::signals::detail::unusable>&)':
b_vect.cpp:(.text._ZN5boost7signals6detail18slot_call_iteratorINS1_11call_bound0IvE6callerINS_9function0IvSaINS_13function_baseEEEEEENS1_23named_slot_map_iteratorEEC1ESB_SB_SA_RNS_8optionalINS1_8unusableEEE[boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::signals::detail::named_slot_map_iterator>::slot_call_iterator(boost::signals::detail::named_slot_map_iterator, boost::signals::detail::named_slot_map_iterator, boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::optional<boost::signals::detail::unusable>&)]+0xa6): undefined reference to `boost::signals::detail::named_slot_map_iterator::operator=(boost::signals::detail::named_slot_map_iterator const&)'
/tmp/ccQFaJsy.o: In function `boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::signals::detail::named_slot_map_iterator>::increment()':
b_vect.cpp:(.text._ZN5boost7signals6detail18slot_call_iteratorINS1_11call_bound0IvE6callerINS_9function0IvSaINS_13function_baseEEEEEENS1_23named_slot_map_iteratorEE9incrementEv[boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::signals::detail::named_slot_map_iterator>::increment()]+0x19): undefined reference to `boost::signals::detail::named_slot_map_iterator::named_slot_map_iterator(boost::signals::detail::named_slot_map_iterator const&)'
b_vect.cpp:(.text._ZN5boost7signals6detail18slot_call_iteratorINS1_11call_bound0IvE6callerINS_9function0IvSaINS_13function_baseEEEEEENS1_23named_slot_map_iteratorEE9incrementEv[boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::signals::detail::named_slot_map_iterator>::increment()]+0x31): undefined reference to `boost::signals::detail::named_slot_map_iterator::named_slot_map_iterator(boost::signals::detail::named_slot_map_iterator const&)'
b_vect.cpp:(.text._ZN5boost7signals6detail18slot_call_iteratorINS1_11call_bound0IvE6callerINS_9function0IvSaINS_13function_baseEEEEEENS1_23named_slot_map_iteratorEE9incrementEv[boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::signals::detail::named_slot_map_iterator>::increment()]+0x56): undefined reference to `boost::signals::detail::named_slot_map_iterator::operator=(boost::signals::detail::named_slot_map_iterator const&)'
/tmp/ccQFaJsy.o: In function `boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::signals::detail::named_slot_map_iterator>::equal(boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::signals::detail::named_slot_map_iterator> const&) const':
b_vect.cpp:(.text._ZNK5boost7signals6detail18slot_call_iteratorINS1_11call_bound0IvE6callerINS_9function0IvSaINS_13function_baseEEEEEENS1_23named_slot_map_iteratorEE5equalERKSC_[boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::signals::detail::named_slot_map_iterator>::equal(boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::signals::detail::named_slot_map_iterator> const&) const]+0x2c): undefined reference to `boost::signals::detail::named_slot_map_iterator::named_slot_map_iterator(boost::signals::detail::named_slot_map_iterator const&)'
b_vect.cpp:(.text._ZNK5boost7signals6detail18slot_call_iteratorINS1_11call_bound0IvE6callerINS_9function0IvSaINS_13function_baseEEEEEENS1_23named_slot_map_iteratorEE5equalERKSC_[boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::signals::detail::named_slot_map_iterator>::equal(boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::signals::detail::named_slot_map_iterator> const&) const]+0x3c): undefined reference to `boost::signals::detail::named_slot_map_iterator::named_slot_map_iterator(boost::signals::detail::named_slot_map_iterator const&)'
b_vect.cpp:(.text._ZNK5boost7signals6detail18slot_call_iteratorINS1_11call_bound0IvE6callerINS_9function0IvSaINS_13function_baseEEEEEENS1_23named_slot_map_iteratorEE5equalERKSC_[boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::signals::detail::named_slot_map_iterator>::equal(boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::signals::detail::named_slot_map_iterator> const&) const]+0x70): undefined reference to `boost::signals::detail::named_slot_map_iterator::operator=(boost::signals::detail::named_slot_map_iterator const&)'
b_vect.cpp:(.text._ZNK5boost7signals6detail18slot_call_iteratorINS1_11call_bound0IvE6callerINS_9function0IvSaINS_13function_baseEEEEEENS1_23named_slot_map_iteratorEE5equalERKSC_[boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::signals::detail::named_slot_map_iterator>::equal(boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::signals::detail::named_slot_map_iterator> const&) const]+0x84): undefined reference to `boost::signals::detail::named_slot_map_iterator::named_slot_map_iterator(boost::signals::detail::named_slot_map_iterator const&)'
b_vect.cpp:(.text._ZNK5boost7signals6detail18slot_call_iteratorINS1_11call_bound0IvE6callerINS_9function0IvSaINS_13function_baseEEEEEENS1_23named_slot_map_iteratorEE5equalERKSC_[boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::signals::detail::named_slot_map_iterator>::equal(boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::signals::detail::named_slot_map_iterator> const&) const]+0x94): undefined reference to `boost::signals::detail::named_slot_map_iterator::named_slot_map_iterator(boost::signals::detail::named_slot_map_iterator const&)'
b_vect.cpp:(.text._ZNK5boost7signals6detail18slot_call_iteratorINS1_11call_bound0IvE6callerINS_9function0IvSaINS_13function_baseEEEEEENS1_23named_slot_map_iteratorEE5equalERKSC_[boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::signals::detail::named_slot_map_iterator>::equal(boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::signals::detail::named_slot_map_iterator> const&) const]+0xbf): undefined reference to `boost::signals::detail::named_slot_map_iterator::operator=(boost::signals::detail::named_slot_map_iterator const&)'
/tmp/ccQFaJsy.o: In function `boost::signal0<void, boost::last_value<void>, int, std::less<int>, boost::function0<void, std::allocator<boost::function_base> > >::operator()()':
b_vect.cpp:(.text._ZN5boost7signal0IvNS_10last_valueIvEEiSt4lessIiENS_9function0IvSaINS_13function_baseEEEEEclEv[boost::signal0<void, boost::last_value<void>, int, std::less<int>, boost::function0<void, std::allocator<boost::function_base> > >::operator()()]+0x22): undefined reference to `boost::signals::detail::call_notification::call_notification(boost::shared_ptr<boost::signals::detail::signal_base_impl> const&)'
b_vect.cpp:(.text._ZN5boost7signal0IvNS_10last_valueIvEEiSt4lessIiENS_9function0IvSaINS_13function_baseEEEEEclEv[boost::signal0<void, boost::last_value<void>, int, std::less<int>, boost::function0<void, std::allocator<boost::function_base> > >::operator()()]+0x69): undefined reference to `boost::signals::detail::named_slot_map::end()'
b_vect.cpp:(.text._ZN5boost7signal0IvNS_10last_valueIvEEiSt4lessIiENS_9function0IvSaINS_13function_baseEEEEEclEv[boost::signal0<void, boost::last_value<void>, int, std::less<int>, boost::function0<void, std::allocator<boost::function_base> > >::operator()()]+0x85): undefined reference to `boost::signals::detail::named_slot_map::end()'
b_vect.cpp:(.text._ZN5boost7signal0IvNS_10last_valueIvEEiSt4lessIiENS_9function0IvSaINS_13function_baseEEEEEclEv[boost::signal0<void, boost::last_value<void>, int, std::less<int>, boost::function0<void, std::allocator<boost::function_base> > >::operator()()]+0xc9): undefined reference to `boost::signals::detail::named_slot_map::end()'
b_vect.cpp:(.text._ZN5boost7signal0IvNS_10last_valueIvEEiSt4lessIiENS_9function0IvSaINS_13function_baseEEEEEclEv[boost::signal0<void, boost::last_value<void>, int, std::less<int>, boost::function0<void, std::allocator<boost::function_base> > >::operator()()]+0xe2): undefined reference to `boost::signals::detail::named_slot_map::begin()'
b_vect.cpp:(.text._ZN5boost7signal0IvNS_10last_valueIvEEiSt4lessIiENS_9function0IvSaINS_13function_baseEEEEEclEv[boost::signal0<void, boost::last_value<void>, int, std::less<int>, boost::function0<void, std::allocator<boost::function_base> > >::operator()()]+0x141): undefined reference to `boost::signals::detail::call_notification::~call_notification()'
b_vect.cpp:(.text._ZN5boost7signal0IvNS_10last_valueIvEEiSt4lessIiENS_9function0IvSaINS_13function_baseEEEEEclEv[boost::signal0<void, boost::last_value<void>, int, std::less<int>, boost::function0<void, std::allocator<boost::function_base> > >::operator()()]+0x184): undefined reference to `boost::signals::detail::call_notification::~call_notification()'
/tmp/ccQFaJsy.o: In function `boost::signal0<void, boost::last_value<void>, int, std::less<int>, boost::function0<void, std::allocator<boost::function_base> > >::~signal0()':
b_vect.cpp:(.text._ZN5boost7signal0IvNS_10last_valueIvEEiSt4lessIiENS_9function0IvSaINS_13function_baseEEEEED1Ev[boost::signal0<void, boost::last_value<void>, int, std::less<int>, boost::function0<void, std::allocator<boost::function_base> > >::~signal0()]+0x1a): undefined reference to `boost::signals::trackable::~trackable()'
b_vect.cpp:(.text._ZN5boost7signal0IvNS_10last_valueIvEEiSt4lessIiENS_9function0IvSaINS_13function_baseEEEEED1Ev[boost::signal0<void, boost::last_value<void>, int, std::less<int>, boost::function0<void, std::allocator<boost::function_base> > >::~signal0()]+0x2b): undefined reference to `boost::signals::detail::signal_base::~signal_base()'
b_vect.cpp:(.text._ZN5boost7signal0IvNS_10last_valueIvEEiSt4lessIiENS_9function0IvSaINS_13function_baseEEEEED1Ev[boost::signal0<void, boost::last_value<void>, int, std::less<int>, boost::function0<void, std::allocator<boost::function_base> > >::~signal0()]+0x46): undefined reference to `boost::signals::detail::signal_base::~signal_base()'
collect2: ld returned 1 exit status
Can someone help me please.
those are errors from the linker. so, the code compiles fine, and all the objetcs are produced, but the linker is telling you that you have used symbols (e.g., functions, class methods) which don't appear in any of the objects or files you're linking. so, you'll have to add the objects or libraries with those symbols to the list of files to be linked. the symbols you want may be in the boost binaries.
This may be a bit late for your answer. After seeing your code in the comments , i thing you are not calling the right library.
#include <boost/signals2.hpp>
#include <iostream>
void func1()
{
std::cout << "Hello world" << std::flush;
}
int main()
{
boost::signals2::signal<void ()> s;
s.connect(func1);
s();
}
you got to include signals2.hpp and not signals(though I am not very sure of it). This works just fine for me.
I have written a class using std::tr1::regex, and I don't know how to link it. I get (sorry for the large dump...) :
$ g++ DictReader.cpp -std=c++0x
/usr/include/c++/4.4/tr1_impl/regex:2255: warning: inline function ‘bool std::tr1::regex_search(_Bi_iter, _Bi_iter, std::tr1::match_results<_Bi_iter, _Allocator>&, const std::tr1::basic_regex<_Ch_type, _Rx_traits>&, std::tr1::regex_constants::match_flag_type) [with _Bi_iter = __gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, _Allocator = std::allocator<std::tr1::sub_match<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, _Ch_type = char, _Rx_traits = std::tr1::regex_traits<char>]’ used but never defined
/usr/lib/gcc/x86_64-linux-gnu/4.4.1/../../../../lib/crt1.o: In function `_start':
/build/buildd/eglibc-2.10.1/csu/../sysdeps/x86_64/elf/start.S:109: undefined reference to `main'
/tmp/ccgBkWlK.o: In function `DictReader::operator++(int)':
DictReader.cpp:(.text+0xb2a): undefined reference to `bool std::tr1::regex_search<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::tr1::sub_match<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, char, std::tr1::regex_traits<char> >(__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::tr1::match_results<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::tr1::sub_match<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > >&, std::tr1::basic_regex<char, std::tr1::regex_traits<char> > const&, std::bitset<11ul>)'
/tmp/ccgBkWlK.o: In function `std::tr1::basic_regex<char, std::tr1::regex_traits<char> >::basic_regex(char const*, unsigned int)':
DictReader.cpp:(.text._ZNSt3tr111basic_regexIcNS_12regex_traitsIcEEEC1EPKcj[std::tr1::basic_regex<char, std::tr1::regex_traits<char> >::basic_regex(char const*, unsigned int)]+0x75): undefined reference to `std::tr1::basic_regex<char, std::tr1::regex_traits<char> >::_M_compile()'
/tmp/ccgBkWlK.o: In function `std::tr1::basic_regex<char, std::tr1::regex_traits<char> >::basic_regex(std::tr1::basic_regex<char, std::tr1::regex_traits<char> > const&)':
DictReader.cpp:(.text._ZNSt3tr111basic_regexIcNS_12regex_traitsIcEEEC1ERKS3_[std::tr1::basic_regex<char, std::tr1::regex_traits<char> >::basic_regex(std::tr1::basic_regex<char, std::tr1::regex_traits<char> > const&)]+0x60): undefined reference to `std::tr1::basic_regex<char, std::tr1::regex_traits<char> >::_M_compile()'
collect2: ld returned 1 exit status.
What should I link against?
This is a linker error, it does not found the function you are using. TR1 is still new so it may not be implemented everywhere. I recommend you to use the boost regex library instead.