2

这似乎是一个常见问题,但我似乎无法找到答案:

有没有办法找到 VS 在链接时用来链接特定函数的特定库?

我正在使用 Visual Studio 构建多项目解决方案。我有一个解决方案(库解决方案),它生成一堆跨多个程序使用的 .lib。这些库之一是从强制大写名称的 Fortran 代码(英特尔 Fortran 77 编译器)生成的。

我将这些库静态链接到我构建应用程序的解决方案中(恰好在 C++ 中,带有适当的“外部 C”和原型。

我遇到的问题是,我可以删除生成特定函数的库,并且我的程序可以愉快地编译(好的)和链接(废话!)。所以我去链接器->输入->附加依赖项中的每个库,并执行一个objdump来寻找函数(fortran中的子程序)名称,但它没有出现。我对所有项目依赖项做同样的事情,但仍然没有骰子。

如果我去将库(以及所有函数调用和原型)更改为随机的东西(如 myFunction12345)并重新编译和链接,一切都会按我的预期工作,所以很明显有些东西正在链接中,我找不到。

fwiw 我的函数名称是 AIR

我对解决我的特定问题不太感兴趣,因为我正在学习如何弄清楚 VS 在链接时使用了哪些 LIB。另外,我很想知道是否有一些链接器标志可以抛出警告,或者如果在链接时有多个定义的对象,则会出错。

有任何想法吗?

4

1 回答 1

4

将 /verbose 添加到链接器命令行附加选项。在结果输出中,查找诸如“Found _AIR in xxxx”之类的行。周围的线条应该非常清楚地表明正在发生的事情。

您可能有一个同名的库从您的目标库之前的库搜索路径中拉入,或者相关符号也可能在默认库中定义。

于 2013-05-20T02:17:54.043 回答