编译sv/feature/cluster 下面这行
rc = nsr_cluster_insert2db(key_image); 出错:
test.c|47| error: invalid conversion from ‘char**’ to ‘const char**’
但是在我 的测试程序中,仅仅给出了警告:
查了C FAQ,下面这段话暂没看懂:
11.10 为什么我不能向接受const char ** 的函数传入char **?
你可以向接受const-T 的指针的地方传入T 的指针(任何类型T 都适用)。但
是, 这个允许在带修饰的指针类型上轻微不匹配的规则(明显的例外) 却不能递归
应用, 而只能用于最上层。
如果你必须赋值或传递除了在最上层还有修饰符不匹配的指针, 你必须明确
使用类型转换(本例中, 使用(const char **)), 不过, 通常需要使用这样的转换意
味着还有转换所不能修复的深层次问题。
参考资料: [ISO, Sec. 6.1.2.6, Sec. 6.3.16.1, Sec. 6.5.3]; [H&S, Sec. 7.9.1 pp.
221-2]
找到出问题的原因了。 上面的test.c虽然是用gcc编译的,但是其中调用 的nsr_cluster_insert2db(key_image)函数是由g++编译链接的共享库libnsrcluster.so提供,所以nsr_cluster_insert2db 函数以C++的方式处理入参,而C++的类型转换规则更加严格,所以编译test.c时就会出现invalid conversion的错误。
以下是makefile的部分内容:
libnsrcluster.so:$(SRC)
g++ -shared -o $@ $^ $(LIBPATH) $(LIB) $(INCLUDE)
test:test.c libnsrcluster.so
gcc -g -o $@ $< $(INCLUDE) $(LIBPATH) $(LIB) -llpool -lnsrcluster
rc = nsr_cluster_insert2db(key_image); 出错:
test.c|47| error: invalid conversion from ‘char**’ to ‘const char**’
但是在我 的测试程序中,仅仅给出了警告:
- #include<stdio.h>
- intmain(){
- char**_p;
- fun(_p);
- }
- voidfun(constchar**p){
- printf("test/n");
- }
- ~
- ~
查了C FAQ,下面这段话暂没看懂:
11.10 为什么我不能向接受const char ** 的函数传入char **?
你可以向接受const-T 的指针的地方传入T 的指针(任何类型T 都适用)。但
是, 这个允许在带修饰的指针类型上轻微不匹配的规则(明显的例外) 却不能递归
应用, 而只能用于最上层。
如果你必须赋值或传递除了在最上层还有修饰符不匹配的指针, 你必须明确
使用类型转换(本例中, 使用(const char **)), 不过, 通常需要使用这样的转换意
味着还有转换所不能修复的深层次问题。
参考资料: [ISO, Sec. 6.1.2.6, Sec. 6.3.16.1, Sec. 6.5.3]; [H&S, Sec. 7.9.1 pp.
221-2]
找到出问题的原因了。 上面的test.c虽然是用gcc编译的,但是其中调用 的nsr_cluster_insert2db(key_image)函数是由g++编译链接的共享库libnsrcluster.so提供,所以nsr_cluster_insert2db 函数以C++的方式处理入参,而C++的类型转换规则更加严格,所以编译test.c时就会出现invalid conversion的错误。
以下是makefile的部分内容:
libnsrcluster.so:$(SRC)
g++ -shared -o $@ $^ $(LIBPATH) $(LIB) $(INCLUDE)
test:test.c libnsrcluster.so
gcc -g -o $@ $< $(INCLUDE) $(LIBPATH) $(LIB) -llpool -lnsrcluster