如何使用C语言链接器脚本将两个全局变量链接到同一地址?

如何使用C语言链接器脚本将两个全局变量链接到同一地址?,c,linker,linker-scripts,C,Linker,Linker Scripts,在我的场景中,我有两个C文件。第一个文件是用户,第二个文件是提供者 例如: user.c const int config_user; void user(void) { if (config_user == 1) { ... do something ... } } provider.c cont int config_provider = 1; 在上述场景中,config\u提供程序的地址应与config\u用户的地址相同。我在链接器脚本中做了几次尝试,但都没有成功。我不

在我的场景中,我有两个C文件。第一个文件是用户,第二个文件是提供者

例如:

user.c
const int config_user;
void user(void) {
if (config_user == 1) {
    ... do something ...
    }
}

provider.c
cont int config_provider = 1;

在上述场景中,
config\u提供程序
的地址应与
config\u用户
的地址相同。我在链接器脚本中做了几次尝试,但都没有成功。我不能使用extern,我必须使用内存链接。这并不能直接回答您的问题,但我建议在provider中定义geter函数。h:

const int *getConfigProvider(void);
在provider.c中

const int *getConfigProvider(void)
{
    static const int config_provider = 1;

    return &config_provider;
}
这以某种方式将实现封装到消费者,并最终实现您想要的

注:


int
的情况下,
getConfigProvider
的返回类型可能只是
int
。对于更复杂的类型(struct),最好使用
const
指针指向它。

这并不能直接回答您的问题,但我建议在provider中定义geter函数。h:

const int *getConfigProvider(void);
在provider.c中

const int *getConfigProvider(void)
{
    static const int config_provider = 1;

    return &config_provider;
}
这以某种方式将实现封装到消费者,并最终实现您想要的

注:


int
的情况下,
getConfigProvider
的返回类型可能只是
int
。对于更复杂的类型(struct),最好使用指向它的
const
指针。

有任何特定原因不能将它们命名为相同的名称并对其中一个使用extern吗?@AjayBrahmakshatriya,provider基本上用于配置用户。这个例子非常简单,配置是一个复杂的结构,而且配置必须是一个常量。现在,HOOD概念不允许在用户中使用extern const,在提供者中使用const。如果最后一行不清楚,请告诉我,我会详细写下来。这能回答你的问题吗?为什么不使用像
const int*getConfigProviderPtr(void)
这样的函数,并在项目/文件中使用它呢?有什么具体原因不能将它们命名为相同的名称并在其中一个文件上使用extern吗?@AjayBrahmakshatriya,provider基本上用于配置用户。这个例子非常简单,配置是一个复杂的结构,而且配置必须是一个常量。现在,HOOD概念不允许在用户中使用extern const,在提供者中使用const。如果最后一行不清楚,请告诉我,我会详细写下来。这能回答你的问题吗?为什么不使用像
const int*getConfigProviderPtr(void)
这样的函数,并在项目/文件中使用它呢?为了更清楚,配置是任务配置,用户使用它来配置和创建RTO中的任务。用户的入口点由RTO直接调用,因此配置必须是内存链接的。此外,也可以调用服务并获取您提到的配置,但它受到HOOD概念的限制。为了更清晰,配置为任务配置,用户使用该配置在RTO中配置和创建任务。用户的入口点由RTO直接调用,因此配置必须是内存链接的。也可以调用服务并获得您提到的配置,但它受到HOOD概念的限制。