在链接阶段对va_start的未定义引用

undefined reference to va_start during the linking phase

提问人:sahe 提问时间:6/20/2022 最后编辑:sahe 更新时间:6/20/2022 访问量:451

问:

嗨,我正在尝试通过在 linux 中链接多个 .so 文件来创建一个可执行文件。

在链接器阶段,我在链接的 e.so 文件之一中出现错误。undefined reference to `va_end'

我试图在整个 /usr/lib 文件夹上搜索该符号以搜索它是否存在于任何 lib 中并且它指向 lstdc++。我已将此库添加到链接器选项中,但它没有按预期工作。

我在 ubuntu 20.04 上使用 gcc-10。您能否帮助解决此链接错误。

链接器命令:

usr/bin/gcc -B,asm,/usr/bin -L,ld,/usr/bin -DINCLUDE_HEADER -isystem/usr/include/c++/10 -isystem/usr/include/x86_64-linux-gnu/c++/10 -isystem/usr/include/c++/10/backward -isystem/usr/lib/gcc/x86_64-linux-gnu/10/include -isystem/usr/lib/gcc/x86_64-linux-gnu/10 -isystem/usr/include -isystem/usr/inlcude/x86_64-linux-gnu/ -isystem/usr/local/include -std=c++11 -fPIC  -I/vobs/opensrc/x86_64/boost1580/include -isystem/usr/include/c++/10 -isystem/usr/include/x86_64-linux-gnu/c++/10 -isystem/usr/include/c++/10/backward -isystem/usr/lib/gcc/x86_64-linux-gnu/10/include -isystem/usr/lib/gcc/x86_64-linux-gnu/10 -isystem/usr/include -isystem/usr/inlcude/x86_64-linux-gnu/ -isystem/usr/local/include -std=c++11 -fPIC  -Wl,-rpath-link,/lib/x86_64-linux-gnu -Wl,-rpath-link,/usr/lib/x86_64-linux-gnu/ -L/lib/x86_64-linux-gnu -L/usr/lib/x86_64-linux-gnu  -o /home/project/netexec -L/runtime/net /home/project/netexec/bin/cfgfile2.o /home/project/netexec/bin/maincfg2.o /home/project/netexec/bin/snmpcfg.o /home/project/netexec/bin/dynlib.o /home/project/netexec/bin/runtimesupport.o /vobs/magnolia/network/bin/netbase_linux2.o /vobs/magnolia/network/bin/misc_linux2.o /vobs/magnolia/network/bin/notemgr.o /home/project/netexec/bin/cfgfiledefs_linux.o
-Wl,-no-as-needed -ldl -lpthread -lsupc++  -lpq -lpqxx -lbootp -L/home/project/folder2/bin -lInterface -L/vobs/linuxlib/usr/lib64 -lcrypto -lcrypto++  /home/project/netexec/bin/netexec.a
error:
/usr/bin/ld: /home/project/folder2/bin/libInterface.so: undefined reference to `va_end'

我有两个问题:

  1. 如果缺少符号,则在创建文件期间 Interface.so 该符号应出错。但当时它没有抱怨。但现在它给出了错误
  2. 如何继续修复此错误
C++ Linux GCC 链接器 未定义引用

评论

0赞 Richard Critten 6/20/2022
读一读 stackoverflow.com/questions/6735277/...
0赞 user17732522 6/20/2022
va_end应该是一个宏。我不认为这个名字应该有任何象征。使用它的来源在哪里?libInterface
0赞 user17732522 6/20/2022
顺便说一句,你还没有链接。许多选项作为链接器选项(和)没有意义。如果要链接 C++ 对象文件,请不要只在命令行上放置标志,请使用而不是 ,后者负责使用正确的链接器标志。libstdc++-std-D-isystem-I-lg++gcc

答: 暂无答案