我正在尝试在 Linux 下的 Qt 应用程序中加载 .so 文件。这是使用 dlopen() 和 dlsym() 的基本功能。但是我需要从 .so 库中获取多个字符串列表,因此我尝试为两者使用一个通用的 .h 文件,但我无法从主应用程序访问该对象。
这是我到目前为止所拥有的:
扩展模块.h
#include <list>
#include <string>
using namespace std;
class ExtModule
{
public:
ExtModule();
list<string> L2MACSource;
list<string> L2MACDest;
...
模块文件.cpp
#include "extmodule.h"
extern "C" ExtModule getCont() {
ExtModule modul;
modul.L2MACSource.push_back("...")
return modul;
}
extern "C" void hello()
{
cout << "hello" << endl;
}
主文件
#include "extmodule.h"
...
dlopen("...../modulefile.so", RTLD_LAZY);
...
typedef ExtModule(*loadedFunc)();
loadedFunc ext_get = (loadedFunc)dlsym(ext_mod, "getCont");
typedef void (*hello_t)();
hello_t hello = (hello_t)dlsym(ext_mod, "hello");
hello();
ExtModule modul = ext_get();
hello() 函数完美无缺,但我无法让 ext_get() 正常工作(/external.so:未定义符号:_ZN9ExtModuleC1Ev)。我必须从 .so 库中检索多个列表,但我不知道这是否是正确的方法。此外,正如您可能已经猜到的那样,我不是特别熟练的程序员。任何建议将不胜感激。
感谢您的任何帮助。