问题描述
我创建的 libxa.a 有一个变量(int p)和一个增加 p 的函数(void increase())。
共享对象(libxb.so 和 libxc.so)每个都有调用 void increase() 的函数(void b() 和 c())。
主要调用 void b() 和 void c()。
main --+-- libxb.so --+-- libxa.a
| |
+-- libxc.so --+
调用 void b() 和我想的一样有效。
但 void c() 不是。我以为打印了 14 和 15,但打印了 12 和 13 就像 void b()。
我认为从共享对象访问的变量(int p)彼此不同。
我该如何解决?
以下是来源。
// a.h
void increase();
// a.c
#include <stdio.h>
#include "a.h"
int p = 11;
void increase()
{
p++;
printf("===[%i]===\n",p);
}
// b.h
void b(void);
// b.c
#include <stdio.h>
#include "b.h"
#include "a.h"
void b(void)
{
increase();
}
// c.h
void c(void);
// c.c
#include <stdio.h>
#include "c.h"
#include "a.h"
void c(void)
{
increase();
}
// main.c
#include <stdio.h>
#include <dlfcn.h>
#include "b.h"
#include "c.h"
int main()
{
void(*b)(void);
void* lb = dlopen("./libxb.so",RTLD_Now);
b = (void(*)(void))dlsym(lb,"b");
void(*c)(void);
void* lc = dlopen("./libxc.so",RTLD_Now);
c = (void(*)(void))dlsym(lc,"c");
b(); // ===[12]===
b(); // ===[13]===
c(); // NOT ===[14]=== BUT ===[12]===
c(); // NOT ===[15]=== BUT ===[13]===
}
// CMakeLists.txt
cmake_minimum_required (VERSION 3.8)
project ("Test")
add_library(xa STATIC a.c)
set_property(TARGET xa PROPERTY POSITION_INDEPENDENT_CODE TRUE)
add_library(xb SHARED b.c)
add_library(xc SHARED c.c)
target_link_libraries(xb xa)
target_link_libraries(xc xa)
add_executable(xm main.c)
target_link_libraries(xm dl)
提前感谢您的关注。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)