我正在尝试调试其他人的库。虽然不在标题中,但该库包含一个C风格的符号_library_internal_function
,我想从实际上是一个测试工具中使用它。
在很多情况下,当我错过标题时,我可以使用extern
来“自己制作”:
extern int library_internal_function(int);
int test_library_function() {
return library_internal_function(42);
}
但是在这种情况下,我收到一个错误:
Undefined symbols for architecture x86_64:
"_library_internal_function", referenced from:
_test_library_function in MyCode.o
ld: symbol(s) not found for architecture x86_64
我认为内部函数必须声明为static int library_internal_function(int)
,即具有内部链接。所以我期待这个错误。
但是我想知道是否有办法以某种方式覆盖它,并绕过原始的链接选项。该符号绝对存在于库中(它没有内联或优化);我可以以某种方式强迫clang的链接器找到并使用内部函数吗?
重申:这不是生产代码。我只是想尝试调试一些东西,如果我可以直接调用函数,而不是通过“受害者”库的公共API以迂回方式调用函数,那将非常有用。