Solution(VS)下多工程之间共享全局变量失效问题

本文探讨了在Visual Studio解决方案中,多个项目间全局变量在动态链接库与静态链接库中出现的不同步问题。主要涉及utest(主工程)、ucodec(DLL库)和core(LIB库)之间的交互,并分析了全局变量失效的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Solution(VS)下多工程之间共享全局变量失效问题

标签(空格分隔):c/c++ vs


http://blog.youkuaiyun.com/hust_sheng/article/details/52829425

Solution
  • 解决方案的意思,可以看做是多个关联项目的链接器。
  • 解决方案把多个相关联的项目通过sln文件关联起来,记录项目地址方便开发者。
  • 一个解决方案可以有多个项目(project),项目可以单独生成,此时解决方案并不会更新,需要你重新生成来挂上新的项目的链接。

问题描述

  • Solution(解决方案)

    • utest (主工程,包含main函数)
    • ucodec (dll库)
    • core (lib库)
  • utest.c中的main函数首先调用core.lib中的函数进行相关初始化操作,该过程中会创建若干全局变量,比如g_context等。

  • utest.c中的main函数接下来调用ucodec.dll中的函数func_op()进行具体操作,函数func_op()在执行的过程中会调用core.lib中的函数,而core.lib中的这些函数会使用之前创建的全局变量(g_context等),此时会发现,这些全局变量都失效了,值为NULL。

问题产生的原因

  问题的关键还在于动态库和静态库的链接以及执行的过程。utest和ucodec.dll都会调用core.lib,对静态链接来说,链接过程都是将静态库的代码直接加入相应的代码工程中,之后再进行编译操作。也就是说,utest和ucodec各自都有一份静态库代码,也就各有一份全局变量(且互不干扰),所以说,上述过程中,不是全局变量失效了,而是这些全局变量只是执行了默认初始化,而没有进行赋值操作。

  • 如果上述过程中的全局变量是在动态库中创建的呢?
    根据动态库的链接过程,应该是可以的,因为并不会产生各自的全局变量,动态库中的全局变量都有对应的字符表以及相应的地址(访问同一个地址)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值