2016-06-01 2 views
-2

1) Я хочу использовать переменную n_threads внутри моего библиотечного кода (который распространяется в общей библиотечной форме в Windows и Linux) в нескольких файлах .cpp.Как создать переменную, которую может использовать код библиотеки, и пользователь может установить?

2) Я хочу, чтобы пользователь библиотеки установил его.

Как это сделать на C++?

  • Я попробовал глобальный файл с static переменными - это ведет к каждому .cpp файлу, имеющим свою копию;
  • Я пытался просто держать его в пространстве имен, что приводит к переменным существам уже определена в других единицах трансляции и, таким образом, библиотека не компиляции
  • Я попытался external (который работает на Linux с .so и не компилировать на Windows, MSVC14) что приводит к тому, что библиотека не компилируется из-за неразрешенных внешних.

Что можно сделать, чтобы глобальная переменная, используемая в нескольких библиотеках, могла быть установлена ​​снаружи (из пользовательского кода библиотеки)?

+0

Как ваша вторая попытка потерпела неудачу? Вы говорили «namespace foo {extern int var; } 'Я полагаю? –

+0

Ошибка \t LNK2001 \t неразрешенный внешний символ «int foo :: n_threads» для третьей попытки – DuckQueen

+0

Ошибка \t LNK2005 \t «int foo :: n_threads», уже определенный в bla.obj для второго – DuckQueen

ответ

-1

Возможно, что общая библиотека может экспортировать переменную даже в Windows. Однако лучше просто оставить переменную как внутренний синглтон и предоставить экспортированную функцию для ее установки.

Смежные вопросы