ошибка компиляции с командой make std :: __ cxx11 - PullRequest
0 голосов
/ 12 октября 2018

Сначала мой Makefile записывается как:

.SUFFIXES: .c .cpp

CC              = g++ -fopenmp
# CFLAGS                = -c -Wall -D_I386 -D_UNIX -O2 -fPIC -Wno-deprecated -Wno-unused-result -std=c++0x -Wno-sign-compare 
CFLAGS          = -c -O2 -Wall -D_I386 -D_UNIX -fPIC -Wno-unused-result -std=c++11 -Wno-sign-compare -D_GLIBCXX_USE_CXX11_ABI=0
LFLAGS          = -shared -O2 -o
LIBS            = -llmi -lblas -lboost_regex -lpthread -lleveldb
MAINDIR = ../../../
LIBDIR  = ${MAINDIR}lib/
LD_PATH = -L${LIBDIR}
INCLUDEDIR = ${MAINDIR}include/Lheader
IN_PATH = -I${INCLUDEDIR} -I${MAINDIR}include
LM_TEST = main.o
all: lang.test clean
lang.test:$(LM_TEST)
     ${CC} -o $@ $^ ${IN_PATH} ${LD_PATH} ${LIBS}

.cpp.o:
    @echo " compiling '$<' ..."
    @$(CC) $(CFLAGS) ${IN_PATH} $<
clean:
    \rm -f *.o

Но когда я даю команду make, тогда возникает ошибка:

/usr/bin/ld: ../../../lib//liblmi.a(LMInterface.o): unrecognized relocation (0x2a) in section `.text'
/usr/bin/ld: final link failed: Bad value

Итак, я обновляю binutils с 2.26в sudo ID вот так:

$ sudo apt-get update
$ sudo apt-get install binutils
$ dpkg -l | grep binutils
ii  binutils                                  2.24-5ubuntu14.2                                    amd64        GNU assembler, linker and binary utilities
ii  binutils-2.26                             2.26.1-1ubuntu1~14.04                               amd64        GNU assembler, linker and binary utilities

Затем binutils-2.26 предоставляет отдельные программы под такими именами, как /usr/bin/as-2.26, поэтому я изменяю их следующим образом:

PATH="/usr/lib/binutils-2.26/bin:$PATH"

Но когдая снова повелел make, затем требуется другая ошибка:

env_posix.cc:(.text+0x28bf): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_assign(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'

Я добавил -D_GLIBCXX_USE_CXX11_ABI=0 в конце строки CFLAGS, но я получил вышеуказанную ошибку.

Итак, как решить эту ошибку?

Моя среда такая (Ubuntu 14.04):

$ gcc --version
gcc (Ubuntu 5.4.1-2ubuntu1~14.04) 5.4.1 20160904
$ ld --version
GNU ld (GNU Binutils for Ubuntu) 2.24
...