Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 没有为此文档加载任何符号-显然也没有执行?_C++_Visual Studio 2015 - Fatal编程技术网

C++ 没有为此文档加载任何符号-显然也没有执行?

C++ 没有为此文档加载任何符号-显然也没有执行?,c++,visual-studio-2015,C++,Visual Studio 2015,我有一个VS2015 C++解决方案,它依赖于运行在CPP中全局代码的代码,因为它执行一些使工厂系统工作的注册。更具体地说: 实用程序项目是包含factory系统的静态库 CompositeValue项目是一个静态库,其中包含需要注册自身的对象 CompositeValueTest项目是运行我的单元测试的可执行文件 CompositeValueTest引用CompositeValue,后者引用实用程序 还有其他几对库使用与CompositeValue和CompositeValueTest相同的

我有一个VS2015 C++解决方案,它依赖于运行在CPP中全局代码的代码,因为它执行一些使工厂系统工作的注册。更具体地说:

  • 实用程序项目是包含factory系统的静态库
  • CompositeValue项目是一个静态库,其中包含需要注册自身的对象
  • CompositeValueTest项目是运行我的单元测试的可执行文件
  • CompositeValueTest引用CompositeValue,后者引用实用程序
  • 还有其他几对库使用与CompositeValue和CompositeValueTest相同的模式,它们都可以工作
无论出于何种原因,当我启动CompositeValueTest时,CompositeValue中的大多数(但不是全部)的.cpp文件都没有被初始化-据我所知,.cpp文件中的任何全局作用域代码都没有被运行

有趣的是,如果我显式地包含.cpp文件(但不包括.h文件),那么该文件(但不包括任何其他文件)的问题就会消失。不过,这似乎是解决问题的一种非常肮脏的方式

另一个症状是,当我在麻烦的.cpp文件中放置断点时,会收到臭名昭著的“此项目未加载任何符号”消息

我读了所有关于那个错误的线索。我试着重新加载。优化被禁用(尽管我希望启用它时,我的代码仍能正确初始化!!)。当我检查模块窗口时,我根本看不到列出的CompositeValues项目,但是CompositeValueTests在那里,看起来是正确的。我检查了所有的设置是否与正在工作的项目的设置相匹配,然后,当这些设置无法解决问题时,我就删除了.vcxproj文件,复制了可以工作的文件,并使用了它们


我的问题似乎不是没有加载符号,而是根本没有包含文件——但当我检查生成输出时,它确实报告正在生成(如果引入错误,生成将失败)。

如果可执行文件没有明确引用特定obj文件中的任何内容,链接器将丢弃整个文件、全局初始值设定项和所有文件。因此,神奇的构建时自注册方案很难实现。将CompositeValue设置为
dll
而不是静态库,自注册应该可以实现。