2

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

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

bool ____nonexistent_value = executeAction();

但是,除非我使用此文件中实现的函数,否则它在此文件中不起作用。如果库被编译为共享库,它确实有效。我更喜欢静态链接它,因为库只是一种方便,因为文件位于不同的目录中。

更新(解决方案):

现在创建共享库而不是静态库可以使一切正常。稍后我将研究如何让所有东西都与静态库链接。感谢大家的帮助!

4

3 回答 3

2

如果该特定文件中没有引用任何符号,则链接器不会包含该文件。你有两个选择:

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

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

于 2010-06-17T20:29:49.950 回答
0

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

于 2010-06-17T22:25:34.380 回答