Я хочу создать библиотеку stati c, в которой есть некоторые функции / переменные / et c. экспортируется, а другие используются внутри библиотеки. Все экспортируется в C -стиле.
Как этого добиться?
Я попробовал следующее:
MyLib.h
int Test(int a, int b);
MyLib. cpp
#include "MyLib.h"
int Private(int a, int b)
{
return a * b;
}
int Test(int a, int b)
{
return Private(a, b);
}
И вот как я использую библиотеку:
Main. cpp
#include "MyLib.h"
int main()
{
int x = Test(4, 6);
...
}
Все это, кажется, работает хорошо.
Однако я считаю, что функция Private
также экспортируется.
Таким образом, следующий код также скомпилирует и скомпонует:
Main. cpp
#include "MyLib.h"
int Private(int a, int b);
int main()
{
int x = Private(4, 6);
...
}
Поэтому, я предполагаю, что я загрязнил глобальное пространство имен, и теперь я не могу определить функцию с именем Private
в Main.cpp
, потому что компоновщик будет жаловаться, что этот символ уже существует.
Так как мне контролировать, какие функции / переменные / символы видны для кодов, которые используют библиотеку?
После выполнения поиска я обнаружил, что объявление * Функция 1037 * в MyLib.cpp
как static
, кажется, решает проблему. Однако я не уверен, что это лучший способ. Для меня было бы более целесообразно «пометить» те, которые я хочу экспортировать, а не «пометить» те, которые я хочу скрыть, поскольку я хочу экспортировать только небольшую часть всех символов.