我想用gcc 4.8.2在Centos 6.4上编译libmemcached。 我已经运行configuration,这给了我:
Configuration summary for libmemcached version 1.0.17 * Installation prefix: /usr/local * System type: unknown-linux-gnu * Host CPU: x86_64 * C Compiler: gcc (GCC) 4.8.2 * C Flags: -g -O2 -Wno-unknown-pragmas -Wno-pragmas -Wall -Wextra -std=c99 -Wunsuffixed-float-constants -Wjump-misses-init -Wno-attributes -Waddress -Wvarargs -Warray-bounds -Wbad-function-cast -Wchar-subscripts -Wcomment -Wfloat-equal -Wformat-security -Wformat=2 -Wformat-y2k -Wlogical-op -Wmaybe-uninitialized -Wmissing-field-initializers -Wmissing-noreturn -Wmissing-prototypes -Wnested-externs -Wnormalized=id -Woverride-init -Wpointer-arith -Wpointer-sign -Wredundant-decls -Wshadow -Wsign-compare -Wstrict-overflow=1 -Wswitch-enum -Wtrampolines -Wundef -Wunsafe-loop-optimizations -funsafe-loop-optimizations -fsanitize=address -fsanitize=thread -Wclobbered -Wunused -Wunused-result -Wunused-variable -Wunused-parameter -Wunused-local-typedefs -Wwrite-strings -fwrapv -pipe * C++ Compiler: g++ (GCC) 4.8.2 * C++ Flags: -g -O2 -Wno-unknown-pragmas -Wno-pragmas -Wall -Wextra -Wno-attributes -Wvarargs -Waddress -Warray-bounds -Wchar-subscripts -Wcomment -Wctor-dtor-privacy -Wfloat-equal -Wformat=2 -Wformat-y2k -Wmaybe-uninitialized -Wmissing-field-initializers -Wlogical-op -Wnon-virtual-dtor -Wnormalized=id -Woverloaded-virtual -Wpointer-arith -Wredundant-decls -Wshadow -Wsign-compare -Wstrict-overflow=1 -Wswitch-enum -Wtrampolines -Wundef -Wunsafe-loop-optimizations -funsafe-loop-optimizations -Wc++11-compat -fsanitize=address -fsanitize=thread -Wclobbered -Wunused -Wunused-result -Wunused-variable -Wunused-parameter -Wunused-local-typedefs -Wwrite-strings -Wformat-security -fwrapv -pipe * CPP Flags: -fvisibility=hidden * LIB Flags: * Assertions enabled: no * Debug enabled: no * Shared: yes * Warnings as failure: no * SASL support: yes * make -j: 2 * VCS checkout: no
但是运行make之后我总是得到:
g++: error: -fsanitize=address is incompatible with -fsanitize=thread
这个错误是什么意思?
这似乎是在最近的版本中的错误: https : //bugs.launchpad.net/libmemcached/+bug/1169311
你可能不希望造成冲突 – 使用最新的稳定版本,特别是如果你在生产硬件上。 你有没有尝试build立一个稳定的版本?
这两个都是g ++的clang版本的选项。
http://clang.llvm.org/docs/ThreadSanitizer.html
http://clang.llvm.org/docs/AddressSanitizer.html
在构build可执行文件时,不能同时使用它们,因为它们会加载不兼容的额外库。
查看config.log文件,并尝试找出为什么这些选项在构build中被启用。 configuration过程中出现问题,因为这两个选项都会显着减慢代码,并且不应默认configuration。 它们主要是为了帮助debugging运行时错误,而不是在生产代码中。
检查与g ++相关的环境variables。