2013-08-21 9 views
1

При компоновке исполняемого файла на Linux я получаю сообщение об ошибке «неопределенная ссылка» как это:Как принудительно связывать символ из определенной библиотеки?

undefined reference to `[email protected]_1.0' 

не имеют контроль над «SOMELIB», но У меня есть символ symbol в одном моих собственных общих библиотек. Я абсолютно уверен, что [email protected]_1.0 тот же (обеспечивает точно такую ​​же функциональность), что символ в моей библиотеке, на самом деле даже исходный код почти тот же.

Как принудительно/сродство [email protected]_1.0 быть связан из моей библиотеки, а не от SOMELIB_1.0? Я думал о каких-то трюках для управления символами в скрипте компоновщика, но я не мог найти никакого решения или даже подсказок.

Заранее спасибо.

ответ

1

После loooong fight (и поиск) Я нашел решение here. Подводя итог: мне нужны были два символа. В моем исходном коде я ставлю что-то вроде этого:

__asm__(".symver symbol1, [email protected]_1.0"); 
void symbol1(void) 
{ 
..... 
} 

__asm__(".symver symbol2, [email protected]_1.0"); 
void symbol2(void) 
{ 
..... 
} 

Тогда мне нужен Liker сценарий mylib.map содержащий:

SOMELIB_1.0 { 
    symbol1; 
    symbol2; 
}; 

Чтобы связать «mylib.so» мне нужно пройти дополнительный аргумент : -Wl,--version-script=mylib.map