DLL加载时未解析的符号

时间:2010-10-06 07:37:34

标签: c++ linux gcc

我正在从应用程序加载DLL,我希望DLL能够使用应用程序中实现的功能。函数的定义放在标题中,并包含在DLL中。任何人都可以告诉我我在这里做错了什么或者这是不是可以做到的?谢谢你的帮助。

应用:

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:undefined symbol:Mult

请帮忙。感谢

1 个答案:

答案 0 :(得分:2)

您应该指示编译器将可执行文件(App)的所有符号放在其动态符号表中。否则,正如Marcus Lindblom所说,依赖关系只会是一种方式。使用g ++,选项为-rdynamic