【问题标题】:sharing c code variable between two directories Linux在两个目录Linux之间共享c代码变量
【发布时间】:2015-04-24 04:57:00
【问题描述】:

我当前对 SDK 的制作有一个错误,指出 wan_name 未在 linux-2.6.21/net/netfilter/nf_conntrack_core.c 中声明。 在nf_conntrack_core.c中声明为extern

我正在根据我的要求重新配置 Linux 内核。

在跟踪 wan_name 变量时,我发现它已在 linux-2.6.21/net/ipv4/ip_tables.c 中声明和使用,并且还声明了 extern 并在 linux2.6.21/net/ipv4/ip_conntrack_core.c 中使用

所以就像wan_name.c 文件内的net/ipv4/ 目录中声明,并被同一目录中的其他.c 文件用作extern。但是net/netfilter/ 目录.c 文件想要访问该变量。

这可能吗?

修复此错误的最佳解决方案是什么??

据我所知,extern 允许您访问在同一目录.c 文件中声明的全局变量。如果其他目录.c 文件想要访问该变量怎么办。

有什么想法吗?

【问题讨论】:

  • 全局变量是定义在其他目录还是同一个目录都没有关系。如果编译单元中的extern 变量声明与相同或不同编译单元中具有完全相同类型的定义匹配,则链接时,它将链接。 (1) 所以你需要检查声明和定义的类型是否完全匹配。 (2) 模块nf_conntrack_core 是否与模块ip_tables 链接。如果没有,您将看到链接器错误。
  • 是的。此错误是链接错误。所以 extern 关键字对于不同目录中的全局变量是不够的。 net/built-in.o: In function 'nf_conntrack_in' : undefined reference to 'wan_name' 是准确的错误行。 iptables 的链接可能晚于 netfilter 模块目标文件,因此出现此错误或类似情况。

标签: c linux linux-kernel


【解决方案1】:

你的想法不正确。你可以你可以使用

extern 

即使 c 文件在不同的目录中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-17
    • 2014-07-05
    • 1970-01-01
    • 1970-01-01
    • 2013-02-16
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    相关资源
    最近更新 更多