AnsweredAssumed Answered

Yocto ADT Eclipse Plugin C++11 (Autotools) configuration

Question asked by Arnaud Nelissen on May 3, 2016
Latest reply on May 13, 2016 by Arnaud Nelissen

Hi everyone,

 

 

Context:

I am using an iMX6UL EVK with a custom, working, image generated with Yocto.

I would like to use Eclipse to develop C++ applications for this target, I then used :

bitbake my-image -c populate_sdk

bitbake meta-ide-support

 

This gave me an SDK and toolchain that I installed by executing the generated script.

I configured the Eclipse IDE (Mars.2) to use Yocto ADT Plugin, and configured it to use my SDK and  toolchain.

I created a new C++ application (Yocto Autotools Hello World Project), built and deployed the template without any error (It successfully ran on the target board).

 

Problem :

But the problem is that when I create a "more" complex application and have to use C++11, I can't compile anymore (The compiler is complaining about C++11 compatibility).

 

#error This file requires compiler and library support for the ISO C++ 2011 standard. This support is currently experimental, and must be enabled with the -std=c++11 or -std=gnu++11 compiler options.

 

I got rid of this error by adding in Project Properties -> Autotools -> Configure -> Advanced :

 

CXXFLAGS="${CXXFLAGS} -std=gnu++11" CPPFLAGS="${CPPFLAGS} -std=gnu++11"

 

But then came other (ugly) errors:

undefined reference to `Audio::Audio(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)'

undefined reference to `Audio::~Audio()'

For reference this is my Audio class:

Audio.h

 

 

#include <iostream>

#include <string>

 

#include <cstdint>

 

#include <alsa/asoundlib.h>

 

 

#define SAMPLE_SIZE (sizeof(int))     // bytes per sample

 

typedef struct {

    int numSamples;

    short *pData;

} wavedata_t;

 

class Audio {

public:

    Audio(std::string pcm_device = "default");

    virtual ~Audio();

 

    bool playbackFile(std::string path);

 

protected:

    snd_pcm_t *pcm_handle;

 

    bool configurePCM(std::string pcm_device, uint channels = 2, uint sampleRate = 44100, snd_pcm_format_t format = SND_PCM_FORMAT_S16_LE, snd_pcm_access_t access = SND_PCM_ACCESS_RW_INTERLEAVED);

    bool closePCM();

 

    // Helpers

    bool loadWavFile(std::string path, wavedata_t *pWaveStruct);

};

 

Audio.cpp

 

#include "Audio.h"

 

 

Audio::Audio(std::string pcm_device) {

    configurePCM(pcm_device);

}

 

Audio::~Audio() {

    closePCM();

}

 

bool Audio::playbackFile(std::string path) {

    <code>

}

 

bool Audio::configurePCM(std::string pcm_device, uint channels, uint sampleRate, snd_pcm_format_t format, snd_pcm_access_t access) {

    <code>

}

 

bool Audio::closePCM() {

    <code>

}

 

// Read in the file to dynamically allocated memory.

// !! Client code must free memory in wavedata_t !!

bool Audio::loadWavFile(std::string path, wavedata_t *pWaveStruct)

{

     <code>

}

 

Question :

How should I configure Eclipse to successfully compile C++11 applications using Autotools via Yocto ADT Plugin ?

 

 

Thanks in advance.

 

 

 

Arnaud (France)

Outcomes