链接时未定义引用符号'socket@GLIBC_2.4'

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链接时未定义引用符号'socket@GLIBC_2.4'相关的知识,希望对你有一定的参考价值。

我正在从ubuntu的默认armhf交叉编译工具链迁移到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"

我一直在努力工作几个小时而没有任何进展。任何帮助表示赞赏。

答案

你链接-nostdlib。这意味着您必须明确地与C库链接。但你的链接器命令既没有提到-lc也没有提到libc.so

以上是关于链接时未定义引用符号'socket@GLIBC_2.4'的主要内容,如果未能解决你的问题,请参考以下文章

链接到 MacOS 上预编译的 QuantLib 二进制文件时未定义的 Boost 符号

与共享库链接时未定义的引用

奇怪的错误 - 链接到自己的库gcc时未定义的引用

在高山图像上构建lua-openssl时未定义引用`strerror_s'

使用本地头文件时未定义的引用

编译具有相同标头的 C 和 C++ 文件时未定义的引用