2012-03-26 2 views
3

Я компилирую программу через clang + llvm (версия 3.1) и пытаюсь запустить ее на компьютере, который также имеет ту же версию clang + llvm. Я собираюсь на Ubuntu 10, но на другом компьютере, где я пытаюсь запустить, есть CentOS 5. Там (в CentOS) я также сталкиваюсь с проблемами компиляции через LLVM (в LLVM реализован прогон компилятора). Вот почему я подумал о компиляции на Ubuntu, возьмите exe оттуда и просто запустите его на машине CentOS.Запуск программы, скомпилированной из clang + llvm на другой машине

Однако, когда я пытаюсь это сделать, я получаю следующую ошибку.

./main: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by ./main) 
./main: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by ./main) 

Как это решить. Обратите внимание, что у меня нет доступа root на этом компьютере.

ответ

3

Одним из решений было бы скопировать библиотеку с вашей рабочей машины Ubuntu на вашу машину CentOS. Поместите в свой Home/Workdir/whereever (TM) и установите переменную LD_PRELOAD в эту библиотеку. Но это может быть довольно утомительным, поскольку возможно, что это не единственная библиотека, которая отсутствует (и, возможно, библиотеки зависят от других библиотек, которые вам также нужны ...).

Это также работает только в том случае, если обе машины имеют одинаковую архитектуру (например, она не будет работать, если ваша машина ubuntu 32 бит и ваш CentOS 64).

+0

LD_PRELOAD сделал трюк. Потрясающие! – pythonic

+0

Еще один вариант, который приходит мне на ум - скомпилировать статическую программу (т. Е. Все необходимые библиотечные функции включены). – flolo

1

Кросс-сборник всегда сложный вопрос. В вашем случае у вас есть разные версии библиотеки C++ на двух машинах. Если вам не нужно часто это делать, я предлагаю вам попробовать и решить проблему компиляции в CentOS. Наверное, это проще.

+0

Да. GCC - это компилятор, поэтому он поставляется с C++ и c компилятором. Поскольку ваши библиотеки C++ не совпадают, ни ваши библиотеки c. – Azrael3000

2

Centos 5 использует более старую версию libstdC++, чем Ubuntu 11.04 или 11.10, поэтому не может использовать двоичные файлы.

Либо скомпилируйте на Centos 5, либо найдите более старую среду компиляции, которая работает. Если вы использовали gcc, вы также можете исследовать среду компилятора LSB.

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