Я новый пользователь 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.
Спасибо.
Это проблема настройки среды для динамического связывания, поскольку общая библиотека устанавливается вне системных системных каталогов по умолчанию. Когда вы выполняете двоичный файл, загрузчику не удалось найти libsystemc-2.3.0.so.
Два решения.
настройка вашего 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
добавление 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
Ага!
Infact, для всех таких сообщений об ошибках, отсутствует то, что пользователь не забыл или забыл установить LD_LIBRARY_PATH
Вы можете установить в затмении настройка компоновщика-> разное -> -Wl, -rpath, your_lib_path
Я добавляю две строки в конце ~/.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-битной версией.