在c++中使用了两个稍微不同的头文件(尽管是一个.lib文件),导致大量错误,但没有生成警告.如何预防呢?
two slightly different header files in c++ used (one .lib file though) causing lots of errors but no warning generated. how to prevent it?
我有一个用一组头文件编译的库,我把这些头文件复制到一个文件夹中,在那里我把所有的头文件放在MSVC包括搜索路径中。
但是编译的。lib是不同的头文件集,我的程序使用的头文件是使用原始的(未改变的)头文件集。我注意到调试器显示错误值的问题。例如,我设置
mystruct->item1 = 1
但是在这行之后,调试器显示mystruct->item1 = 0。虽然印刷很好。但是我注意到将这个结构传递给库函数有不同的值。这让我意识到有不同的结构。
由于结构的大小不同,我认为编译器应该理解这一点并生成警告。(我什么也没得到)。我花了几天的时间来调试这个,我想知道类似的情况下,我怎么能防止它?例如,如果有一个编译器开关可以帮助生成此类情况的警告。或者我怎样才能防止这种严重的错误?
由于结构的大小不同,我认为编译器应该理解这一点并生成警告。
问题是,当您将代码与库的代码连接时,编译器已经不在图片中了。建立连接的程序(链接器)不知道它试图连接的两个二进制代码使用了不同大小的结构——事实上,链接器根本不知道程序使用了任何数据结构:它在不同的层次上操作。
这就是为什么c++工具链中的工具不可能为您生成可靠的警告。然而,这并不意味着你不能自己阻止它:它所需要的只是在库及其头文件中嵌入某种构建号,并在初始化库时比较两者。
相关文章:
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- CMake 生成的 MSVC 项目找不到符号,即使为其相关 dll 正确生成了 lib 文件也是如此
- 从 .lib 文件创建一个.dll文件
- 看不到文件'SDL2.lib'
- 可执行文件C++包括.obj,.lib和.dll吗?
- 我应该安装 .cmake 文件来共享/cmake 还是 lib/cmake?
- 链接:致命错误LNK1104:无法打开文件"python37_d.lib"
- 在 Windows 10 下使用 GTest 的 CMake - 致命错误 LNK1104:无法打开文件"gtest.lib",但存在调试"gtestd.lib"
- 链接器找不到导入的 DLL 的 LIB 文件
- LNK1104无法打开文件"legacy_stdio_definitions.lib"
- 有没有适用于Windows.lib文件的GNU二进制文件描述符(BFD)
- 在Qt中链接具有非标准名称的lib文件
- bitbake-grpc交叉编译/配置失败,错误为c-ares::care引用文件/usr/lib/libcares.s
- C++-在没有自定义.lib文件的情况下从Lua C模块调用Lua函数
- LNK 1104 无法打开文件 'glfw3.lib
- 是否可以将 EXE 文件作为 lib 文件链接到另一个项目?
- C++ CLR dll 需要 .lib 文件,但非 CLR 不需要
- G++ 无法链接 curl lib 文件
- 开放式阅读WAV文件lib
- LNK1104无法打开文件'...lib.obj'