缺少 .lib 文件,动态链接混乱
missing .lib file, Dynamic linking confusion
据此question,
Dynamic linking is done at run time, by the operating system.
直到现在,我在 eclipse CDT 中使用 g++,我静态地 linked odbc32.lib 我从 windows SDK 获得一些 ODBC 函数到我的程序。但我不小心删除了文件,惊讶地发现我的程序仍在 运行ning 并连接到数据库。由于该文件不再存在于我为 -L 选项指定的路径中,我认为它一定仍然存在于该路径的子文件夹之一中的某个位置。但是后来我删除了库路径以查看会发生什么,但我的程序仍然有效!我开始搜索odbc32.lib,但我真的找不到。但是,我确实在 C:\Windows\System32 中找到了一个 odbc32.dll 文件,我认为它可能会动态 link 编辑到我的程序中。
- 如果我是对的,当我从未指定 C:\Windows\System32 作为我的库路径时,编译器如何找到 odbc32.dll?
- 为了检验我的理论,我开始在 system32 文件夹中抓取许多 .dll 文件并使用 -llibrary link编辑它们。由于我的程序 运行 成功,我已经设法 link 我得到的一些文件,但是 linker 找不到一些文件,这是为什么?
我说的对吗?这是动态 linking 的例子吗?
注意:我还从我的路径中删除了 C:\Windows\System32,但由于某种原因,它仍然有效。
根据您的评论,您说您正在使用 g++
和 cygwin
。基本上这意味着链接现在已经完成,就像在 linux(或 unix 或其他)上一样,并且需要一个库。在您的情况下,这是静态库,因此它在编译时链接并且不再需要它。
据此question,
Dynamic linking is done at run time, by the operating system.
直到现在,我在 eclipse CDT 中使用 g++,我静态地 linked odbc32.lib 我从 windows SDK 获得一些 ODBC 函数到我的程序。但我不小心删除了文件,惊讶地发现我的程序仍在 运行ning 并连接到数据库。由于该文件不再存在于我为 -L 选项指定的路径中,我认为它一定仍然存在于该路径的子文件夹之一中的某个位置。但是后来我删除了库路径以查看会发生什么,但我的程序仍然有效!我开始搜索odbc32.lib,但我真的找不到。但是,我确实在 C:\Windows\System32 中找到了一个 odbc32.dll 文件,我认为它可能会动态 link 编辑到我的程序中。
- 如果我是对的,当我从未指定 C:\Windows\System32 作为我的库路径时,编译器如何找到 odbc32.dll?
- 为了检验我的理论,我开始在 system32 文件夹中抓取许多 .dll 文件并使用 -llibrary link编辑它们。由于我的程序 运行 成功,我已经设法 link 我得到的一些文件,但是 linker 找不到一些文件,这是为什么?
我说的对吗?这是动态 linking 的例子吗?
注意:我还从我的路径中删除了 C:\Windows\System32,但由于某种原因,它仍然有效。
根据您的评论,您说您正在使用 g++
和 cygwin
。基本上这意味着链接现在已经完成,就像在 linux(或 unix 或其他)上一样,并且需要一个库。在您的情况下,这是静态库,因此它在编译时链接并且不再需要它。