我正在从应用程序加载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
请帮忙。感谢
答案 0 :(得分:2)
您应该指示编译器将可执行文件(App)的所有符号放在其动态符号表中。否则,正如Marcus Lindblom所说,依赖关系只会是一种方式。使用g ++,选项为-rdynamic
。