我有一个项目,其中包括一个大型第三方图书馆,并被要求确保该项目是免费的。然而,这个库有几千个错误。
修改库以删除这些不是一个选项-这通常将如何处理?
目前,代码是使用Keil uVision构建的,这就是从PC-Lint中调用PC-Lint的地方--如果这仍然是最好的情况的话。
是否有办法说明这些文件是库文件,因此不应该进行分析?
谢谢。
发布于 2013-05-26 22:36:10
这是来自Gimpel网站的信息,我相信它涵盖了你正在寻找的选项(粗体加强调):
Lint使用“库”头的标签来指定程序员无法控制的标头(例如编译器头)。默认情况下,来自外部目录或包含在<>目录中的所有#都被认为是“库”。可以通过使用+libclass选项来修改它,并使用+/-libdir和+/-libh选项进行进一步的优化。然后,您可以使用-wlib、-elib和-elibsym选项来控制从库头发出的消息。与PC-lint一起分发的编译器选项文件通常包含一个-wlib(1)选项,该选项将来自库头的lint输出仅限于错误(抑制警告和信息消息)。
您可以在here网站上找到更多信息。
此外,如果我没有记错,-wlib(0)会取消所有库错误和警告.与上面提到的-wlib(1)相反。当我回去工作时,我得再检查一遍。我身上没有手册的副本。
--编辑--
如果是一个选项,我将把与库相关的所有文件放在不同的目录中。在Keil中,您可以转到“Tools->Set-Lint”。然后将您的新目录添加到“PC包含文件夹”列表中。然后,您的-wlib(0)选项应该将这些标头视为“外文”,而不是返回错误。当然,您还必须修改项目设置来编译库文件。
-EDIT2 2添加的例子-
好吧,这是一个小小的测试,我试着确保我的建议能奏效。我在一个名为"ex_lib“的目录中创建了一个项目,并命名为lib_test。在"Source Group 1“中,我创建并添加了文件"main.c":
main.c
#include <lib_test.h>
int main (void)
{
uint16_t x = 5;
uint16_t y = 10;
uint16_t total1 = 0;
uint16_t total2 = 0;
uint16_t total3 = 0;
uint16_t total4 = 0;
total1 = add(x,y);
total2 = sub(x,y);
total3 = mult(x,y);
total4 = div(x,y);
return 0;
}然后,我创建了一个名为“库”的子目录,并在该目录中创建了第二个名为库的项目。库项目由以下文件"lib_test.h“和"lib_test.c”组成。
lib_test.h
#ifndef LIB_TEST__
#define LIB_TEST__
#include <stdint.h>
extern uint16_t add(uint16_t x, uint16_t y);
extern uint16_t sub(uint16_t x, uint16_t y);
extern uint16_t mult(uint16_t x, uint16_t y);
extern uint16_t div(uint16_t x, uint16_t y);
#endif /* LIB_TEST__ */lib_test.c
#include "lib_test.h"
uint16_t add(uint16_t x, uint16_t y)
{
return (x + y);
}
uint16_t sub(uint16_t x, uint16_t y)
{
return (x - y);
}
uint16_t mult(uint16_t x, uint16_t y)
{
return (x * y);
}
uint16_t div(uint16_t x, uint16_t y)
{
return (x / y);
}在库项目中,在“目标1的选项”下,我选择了"Create“。然后我编译了库项目。
成功编译后,我返回到lib_test项目,右键单击"Target1“并选择"Add”。我创建了一个名为"Library“的组,并将先前编译的"library.lib”从“库”目录添加到"library“组中。
最后,在“目标1”选项(在lib_test项目中)下,我转到"C/C++“选项卡,并将”库“添加到”包含路径“中。然后,我成功地编译了lib_test项目(设置了一些有关变量的警告,但从未使用过)。在“Tools->Set-Lint”下,我添加了以下内容:
PC-Lint包括文件夹: C:\Keil_ARM\RV31\INC\和库\
可执行林特: C:\ Lint \LINT-NT.EXE
配置文件: C:\Lint\lnt\CO-RV.LNT
我修改了CO-RV.LNT文件,通过修改-wlib()来验证Lint结果。当我使用-wlib(0)运行Lint时,没有收到关于我的库文件的警告或错误。然后,我更改了-wlib(2),并收到了许多关于stdint.h的警告。
这无疑是一个过度简化,但它应该给你一个好的起点。另外,我收到了Lint警告,说我的变量不能在"main.c“中访问,但我希望如此。
https://stackoverflow.com/questions/16763730
复制相似问题