链接器的默认行为是排除从未引用的所有函数。但是我想包含这样一个函数用于调试目的:当程序运行异常时,我可以手动将PC设置为该函数的地址并输出一些信息。
有办法吗?
答案 0 :(得分:1)
链接器的默认行为是排除从未引用的所有函数。
对于我熟悉的所有链接器,该语句都是错误的:如果显式列出在链接行上定义了foo()
的目标文件,那么foo()
是始终包含在链接的可执行文件或共享库中(除非您在链接行上指定--function-sections -Wl,--gc-sections
)。
如果在目标文件中定义了foo()
,并且该目标文件位于 archive 库中,并且该目标文件没有对任何符号的任何引用,那么确实如此定义,然后该对象文件不会被拉入链接。
然后解决方案是
foo.o
,或-Wl,--whole-archive -lfoo -Wl,--no-whole-archive
(或链接器的等效标志,如果有的话)或-u foo
以强制foo.o
被拉入链接。答案 1 :(得分:0)
首先创建包含该函数的该c文件的目标文件。
gcc <Yourfile_Name>.c -o functions.o
并使用ld创建可执行文件。我不知道如何使用Microsoft Visual Studio Compiler执行此操作。