【问题标题】:undefined reference to symbol 'socket@GLIBC_2.4' while linking链接时未定义对符号“socket@GLIBC_2.4”的引用
【发布时间】:2018-12-07 03:45:44
【问题描述】:

我正在从 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"

我已经为此工作了几个小时,但没有任何进展。任何帮助表示赞赏。

【问题讨论】:

    标签: linux linker cross-compiling glibc


    【解决方案1】:

    你链接到-nostdlib。这意味着您必须显式链接 C 库。但是您的链接器命令既没有提到-lc,也没有提到libc.so

    【讨论】:

    • 谢谢。你说得对。我错过了很多图书馆。我不知道为什么我认为它们是由链接器自动处理的。我现在可以链接了 :-) 我添加了以下额外标志 -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc 以防万一,stackoverflow.com/questions/14163208/… 帮助我找出丢失的标志。
    猜你喜欢
    • 2017-11-26
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    • 2012-01-11
    • 2023-03-20
    • 2023-03-30
    • 2013-04-21
    • 1970-01-01
    相关资源
    最近更新 更多