由于一些限制,我被迫在运行时加载用C编写的库.第三方为我提供了两个库作为静态存档,我们将其转换为共享对象.我正在使用的应用程序根据一些硬件参数在运行时加载其中一个库.不幸的是,其中一个库主要配置了全局变量.
我已经使用dlsym加载函数引用但是我可以使用dlsym来加载对这些全局变量的引用吗?
Eme*_*ger 11
是的,您可以使用dlsym来访问全局变量(只要它们被导出,而不是静态).下面的例子是在C++和Mac中,但显然C可以正常工作.
lib.cpp:
extern "C" {
int barleyCorn = 12;
}
Run Code Online (Sandbox Code Playgroud)
uselib.cpp
#include <dlfcn.h>
#include <iostream>
using namespace std;
main()
{
void * f = dlopen ("lib.dylib", RTLD_NOW);
void * obj = dlsym (f, "barleyCorn");
int * ptr = (int *) obj;
cout << *ptr << endl;
}
Run Code Online (Sandbox Code Playgroud)
输出:
% ./a.out
12
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5942 次 |
| 最近记录: |