静态链接的库没有在内部运行代码来设置静态变量

时间:2010-06-17 20:20:26

标签: c++ linker static-linking

在我正在研究的c ++项目中,我有一个简单的c ++文件,需要在程序执行开始时运行一些代码。该文件链接到一个静态库,然后链接到主程序。

我在其他运行正常的文件中有类似的代码,看起来像是:

bool ____nonexistent_value = executeAction();

但是,除非我使用此文件中实现的功能,否则它在此文件中不起作用。如果将库编译为共享库,它确实有效。我宁愿静态链接这个,因为库只是方便,因为文件在不同的目录中。

更新(解决方案):

现在创建共享而不是静态库使一切正常。稍后我将研究如何将所有内容与静态库链接起来。谢谢大家的帮助!

3 个答案:

答案 0 :(得分:2)

如果该特定文件中未引用任何符号,则链接器将不包含该文件。您有两种选择:

  1. 从库中删除文件并将其(对象或源文件)直接包含在命令行中以进行编译/链接。然后该文件应包含在可执行文件中。
  2. 在您从其他文件引用的文件中有一个符号(例如带有main()定义的文件),这应该在链接期间“拉”文件。

答案 1 :(得分:1)

我不确定是否有办法在静态库中保证这样的静态分配,但您总是可以将其显式化。为您的库提供init函数,该函数将从main调用以设置您需要的所有内容。这样您就不必担心链接器会忽略显然未使用的代码等等。

答案 2 :(得分:0)

静态初始化没有保证顺序。你想要非常小心!