vendredi 22 décembre 2017

duplicate symbol of a function defined in a header file

Suppose I have a header file file_ops.hpp that looks something like this

#pragma once

bool systemIsLittleEndian() {
    uint16_t x = 0x0011;
    uint8_t *half_x = (uint8_t *) &x;
    if (*half_x == 0x11)
        return true;
    else
        return false;
}

I initially thought it had something to do with the implementation, but as it turns out, I'll get duplicate symbols with just

#pragma once

bool systemIsLittleEndian() { return true; }

If I make it inline, the linker errors go away. That's not something I want to rely on, since inline is a request not a guarantee.

What causes this behavior? I'm not dealing with a scenario where I'm returning some kind of singleton.

There are other methods that are marked as

 bool MY_LIB_EXPORT someFunc();// implemented in `file_ops.cpp`

are these related somehow (mixed extern exported functions and "plain old functions")?

Aucun commentaire:

Enregistrer un commentaire