Tag: clang

由于错误的strcmp参数处理而生成警告

所以我有一个 unsigned char * pMyPtr 分配给某事。 然后我想将它与任意字符串进行比较 strcmp(const char* , const char* ) 但是当我这样做时,clang编译告诉我 warning: passing (aka ‘unsigned char *’) to parameter of type ‘const char *’ converts between pointers to integer types with different sign 如何删除此警告?

cflags’-WI,-export-dynamic’与链接器标志’-export-dynamic’

我使用Clang在CMake中编译了具有不同编译标志的相同程序(不是库) 使用CMAKE_C_FLAGS = -Wl,-export-dynamic 使用CMAKE_EXE_LINKER_FLAGS = -export-dynamic 但我注意到第二种方式似乎不起作用。 我找不到导出的符号。 我很惊讶只有第一种方式有效。 我不知道C编译器是否做了一些棘手的事情,或者Clang或者CMake。 但是如何让第二种方式起作用呢? 第一种方式会打印很多警告。

clang:不能使用带有多个-arch选项的’precompiled-header’输出

在编译我的项目时,从Xcode 4.5切换到Xcode 5时,我突然收到此错误消息。 clang: cannot use ‘precompiled-header’ output with multiple -arch options 我的GNU Makefile包含以下片段: define build CC-$(platform)-$(2)?=$(CC-$(platform)) $(bindir)/$(platformdir)-$(2)$($(3)-dirsuffix)/$(1)_%: $(srcdir)/$(1)/%.c $(common) mkdir -p $$(@D) $$(CC-$(platform)-$(2)) $(cflags) $($(3)-cflags) $(CFLAGS) -o $$@ $$^ $($(3)-ldflags) $(LDFLAGS) endef $(foreach library,$(libraries),$(foreach arch,$(archs),$(foreach configuration,$(configurations),$(eval $(call build,$(library),$(arch),$(configuration)))))) 并且$(CC)评估为符号链接到cc 。

Clang,Microsoft链接器和标准库

我已经使用Microsoft C ++成功构建了Clang,并且我正在尝试编译一个hello world测试用例; 它可以生成一个目标文件,链接标准库是剩下的绊脚石: hello-202520.o : error LNK2019: unresolved external symbol _printf referenced in function _main LINK : error LNK2001: unresolved external symbol _mainCRTStartup 前几年有评论称Clang还没有进行Windows链接,但我得到了那些过时的印象,现在它确实能够生成Windows格式的目标文件: clang -c hello.c ren hello.o hello.obj link hello.obj …没有barf,所以文件格式似乎是正确的,但仍然得到未解决的外部符号错误。 可能的猜测是Microsoft编译器标记其输出目标文件,并指示他们需要链接的标准库,而Clang没有,并且眼睛对相应目标文件的hex转储似乎证实了这一点,并给出了一个暗示链接器命令行使用: link /defaultlib:libcmt /defaultlib:oldnames hello.obj 我对这个阶段寄予厚望,但是它仍然给出了同样未解决的外部符号错误。 我还缺少什么?

Clang 5.0上的vsprintf和vsnprintf 警告

我有这一大块代码 static void err_doit(int errnoflag, int level, const char *fmt, va_list ap) { int errno_save; unsigned long n; char buf[MAXLINE]; errno_save = errno; #ifdef HAVE_VSNPRINTF vsnprintf(buf, sizeof(buf), fmt, ap); /* this is safe */ #else vsprintf(buf ,fmt, ap); /* this is not safe */ #endif n = strlen(buf); if (errnoflag) snprintf(buf + n, sizeof(buf) – […]

变体宏:粘贴标记的扩展

我想知道是否可以“嵌套”可变宏调用。 我只关心GCC和Clang。 我的宏定义如下所示: /** * @brief Invoke an instance method. */ #define $(obj, method, …) \ ({ \ typeof(obj) _obj = obj; \ _obj->interface->method(_obj, ## __VA_ARGS__); \ }) 我用它在我的OO框架中方便地调用“实例方法”( https://github.com/jdolan/objectively ): $(array, addObject, obj); 工作老板。 不幸的是,我还没有想出一种允许嵌套这些调用的方法,这在某些情况下非常有用; 例如: /** * @see MutableSetInterface::addObjectsFromArray(MutableSet *, const Array *) */ static void addObjectsFromArray(MutableSet *self, const Array *array) { if […]

使用clang编译时,openmp无法正确链接

我已经在Ubuntu 16.04上从源代码构建了clang 4.0,并且我正在尝试编译一个简单的OpenMP程序但是收到以下错误。 /tmp/test-7f2c7c.o: In function `main’: /home/me/sf_shared/test.c:(.text+0x52): undefined reference to `__kmpc_fork_call’ /tmp/test-7f2c7c.o: In function `.omp_outlined.’: /home/me/sf_shared/test.c:(.text+0xd9): undefined reference to `__kmpc_for_static_init_4′ /home/me/sf_shared/test.c:(.text+0x16d): undefined reference to `__kmpc_for_static_fini’ clang-4.0: error: linker command failed with exit code 1 (use -v to see invocation) 编译我正在使用./bin/clang ~/sf_shared/tset.c -fopenmp其中bin是bin文件夹,我从源代码构建clang,test.c是一个简单的openmp程序。 添加-v导致以下结果 clang version 4.0.1 Target: x86_64-unknown-linux-gnu Thread model: posix InstalledDir: /home/me/release_build/./bin Found […]

结构中未初始化的字段没有Clang警告

考虑以下结构: typedef struct foo { int a; int b; } foo; 我的编译器没有对以下语句发出警告: foo m = {300} 为什么没有发出警告? 我期待一个警告,因为我没有为结构的最后一个字段提供任何值。 这是我的编译器调用: gcc -Wall -Wpadded -Wuninitialized -g bar.c 这是我的gcc版本: Apple LLVM version 6.0 (clang-600.0.57) (based on LLVM 3.5svn) Target: x86_64-apple-darwin15.0.0 Thread model: posix flipped_move字段是否只包含垃圾? 这样安全吗?

printf指针参数类型警告?

有没有一个好方法摆脱以下警告? 我知道这是一个类型问题,因为我传递的是unsigned long pointer而不是unsigned long整数,但是printf以某种方式支持指针作为参数吗? 我的迂腐想要摆脱这个警告。 如果没有,你如何处理使用printf打印取消引用的指针值? #include int main (void) { unsigned long *test = 1; printf(“%lu\n”, (unsigned long*)test); return 0; } 警告:format指定类型’unsigned long’但参数具有类型

需要在clang中使用-lm和pow(),但不能在sqrt()中使用

在FreeBSD 10.1和使用Clang 3.4.1版 现在我已经看到其他线程询问如何使用pow()进行编译 ,但我没有看到有这个问题的线程。 举个例子: #include #include int main() { float result; result = pow(2,3); printf(“%d”, result); return 0; } 现在使用pow() ,我需要发出clang参数-lm。 cc -lm -o name name.c 但是,用sqrt(5);代替pow(2,3) sqrt(5); ,我可以使用cc -o name name.c进行编译。 如果他们都使用math.h ,那为什么pow()需要链接到库? 方面没有:安装gcc进行测试,我根本不需要使用-lm。