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

时间:2017-02-07 18:59:45

标签: c++ linux ssh linker g++

我有一些使用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中的〜/ .bashrc提供了非交互式会话,例如ssh。

要验证,这是/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

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

P.S。

  • 我没有这些机器的管理员权限
  • 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)
    

1 个答案:

答案 0 :(得分:1)

  

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

两件事之一......

首先,GCC和Clang正在混合和匹配。如果您使用Clang进行编译,由于GCC5 and the C++11 ABILLVM Issue 23529: Add support for gcc's attribute abi_tag (needed for compatibility with gcc 5's libstdc++),这可能是可疑的。

其次,to_string是C ++ 11,因此您需要-std=c++11-std=gnu++11。如果所有其他事情都相同,C ++ 11可能是候选人。除非你-D_GLIBCXX_USE_CXX11_ABI=0,否则它也会为你提供新的ABI。

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