неопределенная ссылка на символ 'socket@GLIBC_2.4' при связывании - PullRequest
0 голосов
/ 28 июня 2018

Я перехожу из стандартного набора инструментов для кросс-компиляции armhf для ubuntu в предварительно скомпилированный набор инструментов из bootlin.com, чтобы иметь больше контроля над версией glibc для проекта. В частности, я использую glibc 2.26 и gcc 6.4.0

Однако я не смог успешно связать проект. При связывании получаю ошибку

/opt/glibc/arm-buildroot-linux-gnueabihf/bin/ld: ./src/foo.o: undefined reference to symbol 'socket@@GLIBC_2.4'
/opt/glibc/lib/gcc/arm-buildroot-linux-gnueabihf/sysroot/lib/libc.so.6: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status

Мои команды компиляции выглядят так:

"/opt/glibc/bin/arm-buildroot-linux-gnueabihf-g++" -std=c++03 \
-nostdinc -nostdinc++ \
"-I"/opt/glibc/arm-buildroot-linux-gnueabihf/include/c++/6.4.0/"" \
"-I"/opt/glibc/arm-buildroot-linux-gnueabihf/include/c++/6.4.0/"/arm-linux-gnueabihf" \
"-I"/opt/glibc/arm-buildroot-linux-gnueabihf/include/c++/6.4.0/"/backward" \
"-I"/opt/glibc/arm-buildroot-linux-gnueabihf/include/c++/6.4.0/"/arm-buildroot-linux-gnueabihf" \
"-I"/opt/glibc/lib/gcc/arm-buildroot-linux-gnueabihf/6.4.0"/include" \
"-I"/opt/glibc/lib/gcc/arm-buildroot-linux-gnueabihf/6.4.0"/include-fixed" \
"-I"/opt/glibc/arm-buildroot-linux-gnueabihf/sysroot"/usr/include"" \
-I/opt/glibc/bin/../arm-buildroot-linux-gnueabihf/sysroot/usr/include/json-c -I/opt/glibc/bin/../arm-buildroot-linux-gnueabihf/sysroot/usr/include -I../3rdparty \
-O3 -Wall -Wextra -pedantic -c -fmessage-length=0 -MMD -MP -MF"src/foo.d" -MT"src/foo.d" -o "src/foo.o" "../src/foo.cpp"

Моя команда связывания выглядит так:

"/opt/glibc/bin/arm-buildroot-linux-gnueabihf-g++" -v -o "out" \
-nostdlib -nostartfiles \
""/opt/glibc/arm-buildroot-linux-gnueabihf/sysroot"/usr/lib/crti.o" "/opt/glibc//lib/gcc/arm-buildroot-linux-gnueabihf/6.4.0"/crtbegin.o \
./src/foo.o ./src/bar.o \
-Wl,-Bstatic -L/opt/glibc/bin/../arm-buildroot-linux-gnueabihf/sysroot/usr/lib -ljson-c \
-Wl,-Bdynamic "-L"/opt/glibc/arm-buildroot-linux-gnueabihf/sysroot"/lib" "-L"/opt/glibc/arm-buildroot-linux-gnueabihf/sysroot"/usr/lib" "-L/opt/glibc/lib" -lrt -pthread -L/opt/glibc/bin/../arm-buildroot-linux-gnueabihf/sysroot/usr/lib -lbluetooth \
"/opt/glibc/lib/gcc/arm-buildroot-linux-gnueabihf/6.4.0"/crtend.o ""/opt/glibc/arm-buildroot-linux-gnueabihf/sysroot"/usr/lib/crtn.o"

Я работал над этим часами без прогресса. Любая помощь приветствуется.

1 Ответ

0 голосов
/ 28 июня 2018

Вы связываете с -nostdlib. Это означает, что вы должны явно связаться с библиотекой C. Но ваша команда компоновщика не упоминает ни -lc, ни libc.so.

...