2017-02-07 9 views
1

У меня есть код с использованием библиотеки SystemC, который компилируется отлично, когда я физически на машине, но бросает неопределенные ссылки, когда я ssh'ing в.Неопределенная ссылка на `sc_dt :: sc_uint_base :: to_string [abi: cxx11]

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. Я источник ~/.bashrc в ~/.bash_profile для неинтерактивных сеансов, таких как 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.

  • Я не имею права администратора на этих машинах
  • НКУ является 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) 
    
+0

Проверьте выходные данные 'env' cmd на обеих машинах. Если у вас нет доступа к администратору, возможно, у вас нет физического доступа и, возможно, это удаленный сервер. Является ли машина ssh'ed той же машиной с физическим доступом, где у вас есть успех? Или вы думаете, что машины идентичны. Такая ошибка может быть из-за несоответствия версии библиотеки (библиотека существует, но функции или прототипы несовместимы). Или некоторая библиотека не загружена (проверьте библиотеки по умолчанию). – oklas

+0

Что такое версия ОС, версия GCC и зависимые библиотеки? – jww

+0

@jww Обновлен мой вопрос с информацией – CJxD

ответ

1

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

Одно из двух ...

Во-первых, GCC и Clang в настоящее время смешаны и подобраны. Если вы компилируете с Clang, это будет вероятным подозреваемым из-за GCC5 and the C++11 ABI и LLVM 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 является вероятным кандидатом, если все остальные вещи равны. Он также получит новую ABI, если вы не -D_GLIBCXX_USE_CXX11_ABI=0.

У вас все еще могут быть проблемы с зависимыми библиотечными конфигурациями, и они могут возникать в вашем вопросе.

+0

Добавление '-D_GLIBCXX_USE_CXX11_ABI = 0' работает, но' -std = C++ 11' не работает. Я не могу сразу понять, почему. Что касается GCC против Clang, Clang не установлен в этой системе, а библиотека, которую я использую, была построена с тем же g ++ – CJxD

 Смежные вопросы

  • Нет связанных вопросов^_^