2013-08-09 3 views
1

Я имею два общих объектов: A.so и B.so A.so содержит определение функционировать add_check_2aНевозможно найти символ в общем объекте

С моей главной функции в main.c, я вызвать функцию add() в B.so, используя dlsym. Эта функция Add() нужно вызвать функцию add_check_2a, которая определена в A.so

A.c:

INT add_check_2a (Int, Int а б) {

возврата (а + б);

}

В B.c файле, я определил что-то вроде этого:

ехЬегп INT add_check_2a (Int А, внутр б);

ИНТ добавить() {

возвращение add_check_2a (10,5);

}

Я рассчитываю на Linux, LAZY связывание автоматически связывать вызов функции с символом в A.so.

В основном я открыл оба этих общих объекта во время инициализации.

main.c:

dlopen (A.so, RTLD_LOCAL | RTLD_LAZY);

dlopen (B.so, RTLD_LOCAL | RTLD_LAZY);

Затем я нахожу символ добавить в B.so, используя dlsym и вызывать функцию, используя указатель функции.

Я не хочу делать еще один dlopen в B.c и хочу, чтобы линкер каким-то образом делал ленивую привязку.

Любые предложения?

УВАЖЕНИЕМ Sapan

ответ

3

Я нашел решение сам. Это было довольно просто.

Мы должны просто открыть .so используя RTLD_GLOBAL | Флаг RTLD_NOW в dlopen.

Не удаляя этот вопрос, так что эта информация может быть полезной для других