0

如果代码引用库中的某个符号,有没有办法使链接失败?

我似乎依稀记得链接器脚本语言中有这样的指令,但显然它不是 GNU LD(也许是错误的记忆)。

我需要它来防止第三方库的某些部分意外链接到应用程序。如果它确实链接,它会添加一些在运行时造成严重破坏的静态初始化程序(它是一个嵌入式项目,因此环境有点古怪)。我无法更改有问题的第三方库。我想在构建时检测错误。我想我可以编写一个构建后脚本来解析映射文件并在找到有问题的部分时发出错误,但是上面提到的 [false?] 内存提示我确定它不能单独使用链接器来完成。

我正在使用 GNU GCC 工具链。

4

1 回答 1

0

好的,出去吃午饭帮助我找到了这个(非常明显的)解决方案:

/* stubs.c */

void ERROR_DO_NOT_REFERENCE_THIS_SYMBOL( void );

void Offending3rdPartyFunction( void )
{
    ERROR_DO_NOT_REFERENCE_THIS_SYMBOL();
}

ERROR_DO_NOT_REFERENCE_THIS_SYMBOL在这里,从未定义符号。一个额外的源文件被添加到项目中,上面显示的存根用于每个不能被引用的函数。如果代码确实引用了这些函数之一,则存根将优先于库提供的符号,并且链接将失败:

test.cpp:(.text._TestFunc+0x4): undefined reference to `ERROR_DO_NOT_REFERENCE_THIS_SYMBOL()'
collect2.exe: error: ld returned 1 exit status
于 2014-11-13T10:31:12.930 回答