2012-01-17 113 views
2

我使用一个软件叫的SuperSense恶搞,我有被粘贴下面makefile文件。错误::: STRCMP尚未声明

#Makefile for sst-light 

    CXX = g++ 
    CFLAGS = -g -O1 -DPIC -fPIC -ILIB -I. 

    CXXFLAGS = $(CFLAGS) -fno-exceptions 
    #CXXFLAGS = -g 
    #LIB = -lm ${TAO_LIB} ${PETSC_SNES_LIB} 
    #include ${TAO_DIR}/bmake/tao_common 

    SOURCES = sst-light.cc \ 
LIB/utils/utils.cc \ 
LIB/stats/stats.cc \ 
LIB/results/results.cc \ 
LIB/evaluate/evaluate.cc \ 
LIB/Chain/Chain.cc \ 
LIB/Perceptron/Perceptron.cc \ 
LIB/tagger_light/Tlight.cc \ 
LIB/examples/examples.cc \ 
LIB/features/features.cc 

    MLIBOBJECTS = LIB/utils/utils.o \ 
    LIB/stats/stats.o \ 
    LIB/results/results.o \ 
    LIB/evaluate/evaluate.o \ 
    LIB/Chain/Chain.o \ 
    LIB/Perceptron/Perceptron.o \ 
    LIB/tagger_light/Tlight.o \ 
    LIB/examples/examples.o \ 
LIB/features/features.o 


    OBJECTS = sst-light.o \ 
LIB/utils/utils.o \ 
LIB/stats/stats.o \ 
LIB/results/results.o \ 
LIB/evaluate/evaluate.o \ 
LIB/Chain/Chain.o \ 
LIB/Perceptron/Perceptron.o \ 
LIB/tagger_light/Tlight.o \ 
LIB/examples/examples.o \ 
LIB/features/features.o #\ 
    # /usr/local/WordNet-2.1/lib/libWN.a 

    PEROBJ = Perceptron/Perceptron.o Perceptron/Kernel_Perceptron.o 
    CRFOBJ = CRF/CRF.o 

    SuperSenseTagger: $(OBJECTS) 
     g++ $(OBJECTS) -o sst 

    videotagger: $(MLIBOBJECTS) videotagger.o 
     g++ $(MLIBOBJECTS) videotagger.o -o videotagger 

    to-conll: to-conll.o 
     g++ to-conll.o -o to-conll 

    libwnss.so:  $(MLIBOBJECTS) 
g++ -shared -o libwnss.so $(MLIBOBJECTS) -lm -lpthread -lc -lstdc++ -lgcc_s 

    .PHONY: clean 

    clean: 
     find . -name '*.[od]' -print -exec rm {} \; 
    clean_bak: 
     find . -name '*~' -print -exec rm {} \; 

    # this command tells GNU make to look for dependencies in *.d files 
    -include $(patsubst %.c,%.d,$(SOURCES:%.cc=%.d)) 

在执行时我得到以下几点:

g++ -g -O1 -DPIC -fPIC -ILIB -I. -fno-exceptions -c -o sst-light.o sst-light.cpp 
In file included from /usr/include/c++/4.3/ext/hash_map:64, 
       from LIB/examples/../tagger_light/../results/../utils/../hash_stuff/hash_stuff.h:26, 
       from LIB/examples/../tagger_light/../results/../utils/utils.h:31, 
       from LIB/examples/../tagger_light/../results/results.h:29, 
       from LIB/examples/../tagger_light/Tlight.h:29, 
       from LIB/examples/examples.h:19, 
       from sst-light.cpp:21: 
/usr/include/c++/4.3/backward/backward_warning.h:33:2: warning: #warning This file includes at least 
one deprecated or antiquated header which may be removed without further notice at a future date. 
Please use a non-deprecated interface with equivalent functionality instead. For a listing of 
replacement headers and interfaces, consult the file backward_warning.h. To disable this warning use -Wno-deprecated. 
In file included from LIB/examples/../tagger_light/../results/../utils/utils.h:31, 
       from LIB/examples/../tagger_light/../results/results.h:29, 
       from LIB/examples/../tagger_light/Tlight.h:29, 
       from LIB/examples/examples.h:19, 
       from sst-light.cpp:21: 
LIB/examples/../tagger_light/../results/../utils/../hash_stuff/hash_stuff.h: In member function 
    âbool std::equal_to<const char*>::operator()(const char*, const char*) constâ: 
LIB/examples/../tagger_light/../results/../utils/../hash_stuff/hash_stuff.h:44: error: â::strcmpâ has not been declared 
make: *** [sst-light.o] Error 1 

任何人有任何想法可能是什么造成的?

+0

你忘了'G ++的'-Wall'标志'在'Makefile'(你应该提高)。 – 2012-01-17 06:08:29

回答

6

是 - 海湾合作委员会已经更新了他们的编译器,它是不是“缺省包括”它曾经与旧版本进行了一些头文件 - 使用的是尚未更新的代码,以反映这一点。

看起来你需要在SST-light.cpp添加包括STRCMP

#include <cstring> 

而且它看起来的代码是用C语言的旧风格++包括 - 所以更改之类的东西

#include <iostream.h> 

#include <iostream> 

但仅仅做到这一点的C++头文件。

1

打开/sst-light-0.4/LIB/hash_stuff/hash_stuff.h和补充一点:

#include <cstring> 

我还加了标志-Wall的Makefile文件(不知道是否有帮助):

CFLAGS = -Wall -g -O1 -DPIC -fPIC -ILIB -I. 

运行sst

./sst