您好,
我有一个项目导入一个包含许多不同内容的文件夹。 该项目使用这些东西的子集。 在最近的一个版本中,链接器在闪存中用完了空间。 经过调查,我意识到没有使用的代码正在被添加到输出中。 我已经查找了一个阻止此操作的链接器选项,但我找不到任何内容。 请您将我引导至正确的设置吗?
谢谢你,
ED
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好,
我有一个项目导入一个包含许多不同内容的文件夹。 该项目使用这些东西的子集。 在最近的一个版本中,链接器在闪存中用完了空间。 经过调查,我意识到没有使用的代码正在被添加到输出中。 我已经查找了一个阻止此操作的链接器选项,但我找不到任何内容。 请您将我引导至正确的设置吗?
谢谢你,
ED
假设您有一个名为 never _used.cpp 的源文件。 它包含类的某些成员函数的实现。 主程序永远不会创建此类的实例。 因此,这些职能都没有被称为。 即便如此,您构建 never_used.cpp 并在最终链接中包括永不使用的.obj 这一事实意味着这些成员函数将出现在程序中,占用了内存。 我无法再现这种行为。
我猜你在做类似的事情,但有一两个不同。 其中一个差异可能是原因所在。 您做了哪些不同的事情?
谢谢,此致,
乔治
你好,乔治,
首先,从地图文件中,我记下了可用闪存的大小。
接下来,在“项目属性”中,在“生成”->“C2000编译器”->“高级选项”->“运行时模型选项”下,我将“将每个函数放在单独的小节(-gen_func_subsection,-mo)中”更改为“打开”。 该项目已经完成,并检查了地图文件。 never_used.cpp 中的函数消失了,免费闪存的数量也增加了。
最后,在项目资源管理器中,我导航到“从不使用.cpp”,右键单击,并选择“从生成中排除”。 该项目已重新构建,并检查了地图文件。 自由闪光量再次增加。 这让我 想到 ,这些建筑和破坏者已经被拆除。 我忽略了检查地图文件的这一部分。
因此,我再次重复了它,但文件未被排除,我确实看到它反映在.cinit 和.Pinit 两个部分以及.text 区域的一些代码中。 当我再次排除该文件时,该文件在地图文件中没有位置。
所以我认为我已经回答了我自己的问题。 同意吗?
谢谢你,
ED
我可以向大家展示一个可能发生的事情的例子。
假设您定义了一个具有非普通构造函数的类...
/* These lines typically in header file */
class ntc {
ntc(/* arguments here */);
};
/* These lines typically in a C++ file */
ntc::ntc(/* arguments here */)
{
/* non-trivial code here */
}
而且,您可以定义此类的全局实例...
ntc global_instance(/* arguments here */);
假设您的程序的主要部分从不引用 global_instance,也不以任何方式使用此类。
如果生成包含定义此构造函数和 global_instance 的 C++源文件,则会导致此处显示的所有代码和数据成为生成的一部分。 如果从内部版本中排除这些相同的 C++源文件,则该代码和数据不属于内部版本。
我怀疑您的代码在这些方面有所作用。
谢谢,此致,
乔治