C ++ -fvisibility = skryté -fvisibility-inlines skryté

hlasů
13

Mám dotaz týkající se C ++ atribut viditelnost. Přečetl jsem http://gcc.gnu.org/wiki/Visibility a přesto I dont zcela pochopit, jak to funguje.

Chci používat viditelnost, že se skrývá v některé z mých sdílených knihoven, které mám. Věřím, že to znamená, že symboly jsou skryté?

Jak se vám chtěl propojit sdílenou knihovnu a pak? Je nějaký zvláštní způsob, jak? Kdybych to propojit, jak to obvykle dostane spojena ono doesnt práce.

Může mi někdo pomoci, prosím.

Položena 25/08/2010 v 22:28
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
23

-fvisibility=hiddendělá všechny své symboly skryty ve výchozím nastavení .

Co vás pak musíte udělat, je vybrat si, jaké funkce chcete být viditelné pro uživatele spojují proti vaší knihovny a zviditelnit je tím, že je značení s viditelnou atributu.

Např

void __attribute__((visibility("default"))) Exported()
{
    // ...
}
Odpovězeno 25/08/2010 v 22:37
zdroj uživatelem

hlasů
3

Snižuje udržet zbytečné informace o symbol, který je soukromý ke sdíleným objektům.

Zvážit sdílený objekt, který má více než 10.000 symbolů (funkce / globální proměnné), ale pouze 100 z nich byly veřejné funkce přístupné z uživatelů knihovny. Můžeme dělat jen 100 funkce jako viditelný pro ostatní & zbývající 9,900 symboly jako soukromé.

Bude-li zmenšit velikost sdíleného objektu, jak je dobře, protože to je přemístění tabulky bude mít jen 100 symbol informace. Použití tohoto parametru spolu s -ffunction řezy -fdata řezu sníží velikost sdílený objekt dále tím, že má definici, která je relevantní pro že 100 symbolů.

Odpovězeno 21/01/2013 v 06:04
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more