Я работаю с VC9 в Windows.
У меня есть библиотека (назовем ее libfoo
), которая состоит из следующих файлов (директивы include guards и #include пропущены дляради ясности):
// foo.hpp
class Foo
{
public:
static const std::string SOME_CONST;
};
И:
// foo.cpp
#include "foo.hpp"
const std::string Foo::SOME_CONST = "hello";
Foo::SOME_CONST
экспортируется с использованием файла .def
.
Библиотека прекрасно компилируется:* file и libfoo.dll
file генерируются.
Я использовал эту библиотеку в примере программы, например:
// main.cpp
#include <foo.hpp>
int main()
{
std::cout << Foo::SOME_CONST << std::endl; // std::bad_alloc here
return EXIT_SUCCESS;
}
A std::bad_alloc
выбрасывается при каждой попытке использовать Foo::SOME_CONST
.
Это происходит только в том случае, если я динамически связываю с libfoo
.Связывание статически приводит к прекрасно работающей программе.
Что здесь может происходить?Законно ли таким образом экспортировать std::string
константу?