Ошибка при загрузке разделяемых библиотек: libsystemc-2.3.0.so

Я новичок в Linux и пытаюсь установить библиотеку systemc-2.3.0 на свой компьютер (Fedora 16). Я очень тщательно следовал всем инструкциям, упомянутым в файле INSTALL библиотеки, но я получаю сообщение об ошибке, когда пытаюсь запустить простую программу с использованием ECLIPSE. Я правильно связал все библиотеки в ECLIPSE, но все равно получаю сообщение об ошибке.

Программа выглядит следующим образом:

#include <systemc.h>

using namespace std;

int sc_main(int argc, char * argv[])
{
    cout << "hello world" << endl;

    for(int i=0; i<argc; i++)
        cout << argv[i] << " ";

    cout << endl;
    return 0;
}

И вывод ошибки:

/home/vivek/workspace/TestSystemC/Debug/TestSystemC: ошибка при загрузке общих библиотек: libsystemc-2.3.0.so: невозможно открыть общий объектный файл: нет такого файла или каталога

Любая помощь будет высоко оценена. Пожалуйста, объясните ваши предложения подробно (шаг за шагом), так как я не эксперт по Linux.

Спасибо.


person SilverSurfer    schedule 13.09.2012    source источник
comment
Присутствует ли libsystemc-2.3.0.so в /usr/lib?   -  person Pavel Ognev    schedule 13.09.2012
comment
Нет. libsystemc-2.3.0.so находится в /usr/local/systemc-2.3.0/lib-linux64.   -  person SilverSurfer    schedule 13.09.2012
comment
Итак, содержится ли этот путь в переменной окружения $PATH? Если нет, попробуйте сделать ссылку на эту библиотеку в /usr/lib: ln -s /usr/local/systemc-2.3.0/lib-linux64/libsystemc-2.3.0.so /usr/lib/libsystemc-2.3.0.so   -  person Pavel Ognev    schedule 13.09.2012
comment
Извините, но я не знаю, что такое переменная PATH. Ну, я вставил команду в терминал, но все равно не могу запустить программу. Я забыл упомянуть, что я могу создать программу, но не могу ее запустить.   -  person SilverSurfer    schedule 13.09.2012
comment
1) Переменные среды такие же, как в MS Windows. Введите echo $PATH в терминале, чтобы увидеть содержимое PATH. 2) Вы не можете связать эту библиотеку без привилегий root.   -  person Pavel Ognev    schedule 13.09.2012
comment
Большое спасибо, это сработало для меня.   -  person SilverSurfer    schedule 19.09.2012


Ответы (4)


Это проблема с настройкой среды для динамического связывания, поскольку общая библиотека устанавливается за пределами системных каталогов библиотек по умолчанию. При выполнении бинарника загрузчику не удалось найти libsystemc-2.3.0.so.

Два решения.

  1. установка вашего LD_LIBRARY_PATH.

    export LD_LIBRARY_PATH=/usr/local/systemc-2.3.0/lib-linux64:$LD_LIBRARY_PATH

    или, если ваш LD_LIBRARY_PATH по умолчанию пуст

    export LD_LIBRARY_PATH=/usr/local/systemc-2.3.0/lib-linux64

  2. добавление rpath к исполняемому файлу при связывании двоичного файла. Он добавляет запись в двоичный файл и указывает загрузчику искать дополнительный путь.

    g++ -o TestSystemC ...your c++ files... -L/usr/local/systemc-2.3.0/lib-linux64 -lsystemc-2.3.0 -Wl,-rpath,/usr/local/systemc-2.3.0/lib-linux64

person jclin    schedule 31.10.2012

Я добавляю две строки в конце ~/.profile следующим образом:

export SYSTEMC_HOME=/usr/local/systemc-2.3.0/
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/systemc-2.3.0/lib-linux64

И если это не сработает, вы можете попробовать добавить две программные ссылки (т.е. lib->lib-linux64/ и lib-linux -> lib-linux) в каталог верхнего уровня systemc-2.3.0, как вы установили (например, мой путь /usr/local/systemc-2.3.0/). Соответствующие команды следующие

(измените текущий каталог на каталог $SYSTEMC_HOME):

$ln -s /usr/local/systemc-2.3.0 lib
$ln -s /usr/local/systemc-2.3.0  lib-linux

Возможно, lib-linux64 поддерживает 64-битную операционную систему, а lib или lib->linux поддерживает 32-битную операционную систему.

person Jeremy Gu    schedule 21.10.2015

Ага! На самом деле, для всех таких сообщений об ошибках отсутствует то, что пользователь не установил или забыл установить LD_LIBRARY_PATH.

person Pvs    schedule 24.07.2013

вы можете установить в eclipse настройка компоновщика-> разное -> -Wl,-rpath,your_lib_path

person Chintan Patel    schedule 08.08.2015