对'sc_dt::sc_uint_base::to_string[abi:cxx11]的未定义引用

Undefined reference to `sc_dt::sc_uint_base::to_string[abi:cxx11]

本文关键字:sc cxx11 abi 引用 string 未定义 base dt uint to      更新时间:2023-10-16

我有一些使用 SystemC 库的代码,当我在机器上时编译得很好,但在我 ssh 时会抛出未定义的引用。

g++ -Wno-deprecated -O0 -g3 -I/path/to/include socex2.cpp -L/path/to/lib -lsystemc
/tmp/ccCNdiMA.o: In function `sc_dt::sc_uint_base::print(std::ostream&) const':
/path/to/include/sysc/datatypes/int/sc_uint_base.h:844: undefined reference to `sc_dt::sc_uint_base::to_string[abi:cxx11](sc_dt::sc_numrep, bool) const'
collect2: error: ld returned 1 exit status

起初我认为这是LD_LIBRARY_PATH的问题,在~/.bashrc中设置为/path/to/lib。我在 ~/.bash_profile 中为非交互式会话(如 ssh(提供 ~/.bashrc 源代码。

为了验证,以下是相关的/usr/bin/env

TERM=xterm
SHELL=/bin/bash
SSH_CLIENT=xx.xx.xx.xx 56176 22
LD_LIBRARY_PATH=/path/to/lib
SSH_CONNECTION=xx.xx.xx.xx 56176 yy.yy.yy.yy 22
_=/usr/bin/env

为什么我的程序无法链接?我正在使用的标头和库完全相同,并且在完全相同的位置。

附言

  • 我没有这些计算机的管理员访问权限
  • GCC 是 5.4.0
  • 操作系统是 Ubuntu 16.04
  • 依赖库:

    $ ldd /path/to/lib/libsystemc.so
        linux-vdso.so.1 =>  (0x00007ffe29d36000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fb9b85f5000)
        libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fb9b8273000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fb9b7f69000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb9b7ba0000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fb9b798a000)
        /lib64/ld-linux-x86-64.so.2 (0x000056093a23e000)
    

...to_string[abi:cxx11] ...

两件事之一...

首先,海湾合作委员会和Clang是混合和匹配的。如果你使用 Clang 编译,这可能是一个可疑的问题,因为 GCC5 和 C++11 ABI 和 LLVM 问题 23529:添加对 gcc 属性abi_tag的支持(需要与 gcc 5 的 libstdc++ 兼容(。

其次,to_string是 C++11,所以你需要 -std=c++11-std=gnu++11 .如果所有其他条件相同,则C++11是可能的候选者。它还会为您提供新的 ABI,除非您-D_GLIBCXX_USE_CXX11_ABI=0.

您仍然可能遇到依赖库配置的问题,并且它们可能会出现在您的问题中。