如何在单独的共享对象库中引用变量

时间:2012-06-19 17:12:36

标签: c linux gcc shared-libraries

假设我有一个使用共享对象库X的程序,它与我的程序分开编译。现在,当我为X编写代码时,我需要引用一个变量,比如A,它在我的程序中声明(将使用X库)。如何在X代码中引用变量A?弱参考? extern关键字?还是其他一些技术?

2 个答案:

答案 0 :(得分:5)

使用extern关键字:

extern int A;

// later:
call_a_function(A);
A = something_else;

是的,如果共享对象是单独编译的,它可以工作。在这种情况下,编译器在内部生成一个带有变量名称的导出符号,动态链接器会查找它。

更新:正如@Hristo指出的那样,此外,在构建单元时必须指定-rdynamic链接器标志才能使其工作。

答案 1 :(得分:4)

编译程序时需要指定 -rdynamic 标志才能使其正常工作。然后共享对象库可以通过简单地使用 extern 关键字来引用程序中的变量。