是否可以识别与特定头文件相对应的库?

9 浏览
0 Comments

是否可以识别与特定头文件相对应的库?

假设我们在同一个目录下有几个头文件和库文件。如果我不知道应该链接哪个库,我能否通过编程确定必须使用哪个库。

假设我试图编译我的代码,链接器报告了未解决的外部符号,有什么办法可以解决呢?我知道正确的库存在于相同的目录中。

0
0 Comments

问题的原因是,虽然在编译阶段可以通过编程来确定应使用的库,但一旦链接开始,控制权就消失了。即使正确的库存在于同一目录中,也无法在同一程序或代码库中以编程方式确定要使用的库。

解决方法是,无法通过编程方式确定库是否存在于同一目录中。库可以存在于任何路径中,只需在MSVC中设置路径变量或在gcc中使用-L选项。因此,同一目录中是否存在库的问题是没有意义的。

如果想知道库是否存在于系统中以及其位置,也无法在同一代码库中以编程方式实现。因为要运行该代码库,必须将其链接。这是一个鸡生蛋的问题。可以手动检查或编写自己的独立脚本/代码来完成此任务。

0
0 Comments

有时候我们在开发过程中,可能会遇到需要找到特定头文件对应的库的情况。这可能是因为我们需要使用头文件中定义的函数或者变量,但是我们不知道这些函数或变量所在的库是哪个。在这种情况下,我们需要找到对应的库,以便能够正确地链接和使用这些函数或变量。

解决这个问题的方法有很多种。下面是一些常见的方法:

1. 使用动态链接库(DLL):动态链接库是一种包含可执行代码和数据的文件,可以在运行时被程序加载和使用。在C++中,可以使用GetProcAddress函数来获取动态链接库中导出函数的地址。通过这种方式,我们可以找到对应的库,并使用其中的函数或变量。

2. 在头文件中添加代码:如果你自己编写了这个库,那么你可以在头文件中添加一些代码来指定需要链接的库。在C++中,可以使用#pragma comment( lib, "libname.lib" )这样的指令来告诉编译器需要链接的库的名称。这样,当编译器编译代码时,会自动链接这个库。

总之,当我们需要找到特定头文件对应的库时,可以使用动态链接库或在头文件中添加代码的方式来解决这个问题。这样,我们就能正确地链接和使用这些库中定义的函数和变量。希望这些方法能对你有所帮助。

0
0 Comments

从stackoverflow上的一个问题的回答中,可以找到解决这个问题的方法。问题的原因是如何确定某个头文件对应的库文件,解决方法是写一个简单的脚本,遍历目录中的所有库文件,然后调用dumpbin命令将所有库文件的符号导出到一个以库名开头的文件中,然后可以在生成的文件中搜索所需的符号来获取正确的库文件。在Windows之外的系统上可以使用nm命令解决这个问题。

0