Неразрешенный символ при загрузке DLL - PullRequest
0 голосов
/ 06 октября 2010

Я загружаю DLL из приложения и хочу, чтобы DLL могла использовать функцию, реализованную в приложении. Определение функции помещено в заголовок и включено в DLL. Может кто-нибудь сказать мне, что я делаю здесь неправильно или это нельзя сделать? Спасибо за любую помощь.

App:

include <API.h>

extern "C" int Mult(int x, int y)
{
    return x*y;
}

int main(int argc, char **argv)
{
if(argc <= 1)
    return -1;

void * pHandle = dlopen(argv[1], RTLD_NOW);
if(pHandle == NULL)
{
    cout << "Can't find DLL : " << argv[1] << endl;
    cout << dlerror() << endl;
    return -2;
}
else
    cout << "DLL Loaded" << endl;

Файл API.h:

#ifndef __APP_API__
#define __APP_API__

extern "C" int Mult(int x, int y);

#endif

И DLL:

#include <API.h>

int Imp1::GetFunctionID()
{
   return Mult(42, 42);
}

При запуске выдает ошибку:

Не могу найти DLL: ./ll.d.so ./ll.d.so: неопределенный символ: Mult

Пожалуйста, помогите. Спасибо

1 Ответ

2 голосов
/ 06 октября 2010

Вы должны указать вашему компилятору поместить все символы вашего исполняемого файла (приложения) в его динамическую таблицу символов.В противном случае, как сказал Маркус Линдблом, зависимости будут только односторонними.С g ++ опция -rdynamic.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...