В Visual Studio я могу получить конкретные символы, экспортированные из DLL с помощью / ВКЛЮЧИТЬ (Ссылки с символами силы) Опция линкера. Есть ли эквивалентная опция в GCC?
Я компилирую с -fvisibility = hidden, поэтому по умолчанию символы не экспортируются.
Хотя видимость символов может работать, это не совсем ответ на заданный вопрос. Это не опция компоновщика, и требует изменения исходного кода, что может быть нежелательно. Более или менее эквивалентна карта экспорта, но она доступна только для GCC с GNU linker. Опция командной строки GCC будет
-Wl,--version-script=a.map
с .map выглядит
{
global: a;
local: *;
}
больше информации на http://www.akkadia.org/drepper/dsohowto.pdf
Один из способов сделать это — использовать __attribute__
:
void foo() __attribute__((visibility("default")));
void foo() {
/* Implementation */
}
Это должно переопределить ваш -fvisibility=hidden
параметр только для этой функции. Вы также можете сделать это:
class __attribute__((visibility("default"))) my_class {
public:
myClass();
~myClass();
// Other declarations...
};
Это экспортирует весь класс и все объявления, содержащиеся в нем.